syscall.c (0d07fe47d4986271a21ed4ff5237275ff55dd93f) syscall.c (333858b77c2b4f7636257808a77822c58bdd80fe)
1/*
2 * Linux syscalls
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or

--- 7011 unchanged lines hidden (view full) ---

7020
7021 count1 = 0;
7022 de = dirp;
7023 if (!(target_dirp = lock_user(VERIFY_WRITE, arg2, count, 0)))
7024 goto efault;
7025 tde = target_dirp;
7026 while (len > 0) {
7027 reclen = de->d_reclen;
1/*
2 * Linux syscalls
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or

--- 7011 unchanged lines hidden (view full) ---

7020
7021 count1 = 0;
7022 de = dirp;
7023 if (!(target_dirp = lock_user(VERIFY_WRITE, arg2, count, 0)))
7024 goto efault;
7025 tde = target_dirp;
7026 while (len > 0) {
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 tde->d_reclen = tswap16(treclen);
7030 tde->d_ino = tswapal(de->d_ino);
7031 tde->d_off = tswapal(de->d_off);
7032 tde->d_reclen = tswap16(treclen);
7033 tde->d_ino = tswapal(de->d_ino);
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 de = (struct linux_dirent *)((char *)de + reclen);
7038 len -= reclen;
7039 tde = (struct target_dirent *)((char *)tde + treclen);
7040 count1 += treclen;
7041 }
7042 ret = count1;
7043 unlock_user(target_dirp, arg2, ret);
7044 }

--- 1803 unchanged lines hidden ---
7036 de = (struct linux_dirent *)((char *)de + reclen);
7037 len -= reclen;
7038 tde = (struct target_dirent *)((char *)tde + treclen);
7039 count1 += treclen;
7040 }
7041 ret = count1;
7042 unlock_user(target_dirp, arg2, ret);
7043 }

--- 1803 unchanged lines hidden ---