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 --- |