Revision 333858b7

b/linux-user/syscall.c
7025 7025
		tde = target_dirp;
7026 7026
                while (len > 0) {
7027 7027
                    reclen = de->d_reclen;
7028
		    treclen = reclen - (2 * (sizeof(long) - sizeof(abi_long)));
7028
                    tnamelen = reclen - offsetof(struct linux_dirent, d_name);
7029
                    assert(tnamelen >= 0);
7030
                    treclen = tnamelen + offsetof(struct target_dirent, d_name);
7031
                    assert(count1 + treclen <= count);
7029 7032
                    tde->d_reclen = tswap16(treclen);
7030 7033
                    tde->d_ino = tswapal(de->d_ino);
7031 7034
                    tde->d_off = tswapal(de->d_off);
7032
		    tnamelen = treclen - (2 * sizeof(abi_long) + 2);
7033
		    if (tnamelen > 256)
7034
                        tnamelen = 256;
7035
                    /* XXX: may not be correct */
7036
                    pstrcpy(tde->d_name, tnamelen, de->d_name);
7035
                    memcpy(tde->d_name, de->d_name, tnamelen);
7037 7036
                    de = (struct linux_dirent *)((char *)de + reclen);
7038 7037
                    len -= reclen;
7039 7038
                    tde = (struct target_dirent *)((char *)tde + treclen);
b/linux-user/syscall_defs.h
255 255
};
256 256

  
257 257
struct target_dirent {
258
	abi_long	d_ino;
259
	abi_long	d_off;
260
	unsigned short	d_reclen;
261
	char		d_name[256]; /* We must not include limits.h! */
258
        abi_long        d_ino;
259
        abi_long        d_off;
260
        unsigned short  d_reclen;
261
        char            d_name[];
262 262
};
263 263

  
264 264
struct target_dirent64 {

Also available in: Unified diff