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