Commit 60cd49d5d7e6dd3858f72916fbcf462ba60bbd6e

Authored by bellard
1 parent a300e691

added stat64


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@31 c046a42c-6fe2-441c-8c8c-71466251a162
linux-user/syscall.c
@@ -1002,10 +1002,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, @@ -1002,10 +1002,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
1002 case TARGET_NR_sigaction: 1002 case TARGET_NR_sigaction:
1003 #if 1 1003 #if 1
1004 { 1004 {
1005 - int signum = arg1;  
1006 - struct target_old_sigaction *tact = arg2, *toldact = arg3;  
1007 ret = 0; 1005 ret = 0;
1008 -  
1009 } 1006 }
1010 break; 1007 break;
1011 #else 1008 #else
@@ -1464,9 +1461,37 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, @@ -1464,9 +1461,37 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
1464 case TARGET_NR_ugetrlimit: 1461 case TARGET_NR_ugetrlimit:
1465 case TARGET_NR_truncate64: 1462 case TARGET_NR_truncate64:
1466 case TARGET_NR_ftruncate64: 1463 case TARGET_NR_ftruncate64:
  1464 + goto unimplemented;
1467 case TARGET_NR_stat64: 1465 case TARGET_NR_stat64:
  1466 + ret = get_errno(stat((const char *)arg1, &st));
  1467 + goto do_stat64;
1468 case TARGET_NR_lstat64: 1468 case TARGET_NR_lstat64:
  1469 + ret = get_errno(lstat((const char *)arg1, &st));
  1470 + goto do_stat64;
1469 case TARGET_NR_fstat64: 1471 case TARGET_NR_fstat64:
  1472 + {
  1473 + ret = get_errno(fstat(arg1, &st));
  1474 + do_stat64:
  1475 + if (!is_error(ret)) {
  1476 + struct target_stat64 *target_st = (void *)arg2;
  1477 + target_st->st_dev = tswap16(st.st_dev);
  1478 + target_st->st_ino = tswapl(st.st_ino);
  1479 + target_st->st_mode = tswap16(st.st_mode);
  1480 + target_st->st_nlink = tswap16(st.st_nlink);
  1481 + target_st->st_uid = tswap16(st.st_uid);
  1482 + target_st->st_gid = tswap16(st.st_gid);
  1483 + target_st->st_rdev = tswap16(st.st_rdev);
  1484 + /* XXX: better use of kernel struct */
  1485 + target_st->st_size = tswapl(st.st_size);
  1486 + target_st->st_blksize = tswapl(st.st_blksize);
  1487 + target_st->st_blocks = tswapl(st.st_blocks);
  1488 + target_st->st_atime = tswapl(st.st_atime);
  1489 + target_st->st_mtime = tswapl(st.st_mtime);
  1490 + target_st->st_ctime = tswapl(st.st_ctime);
  1491 + }
  1492 + }
  1493 + break;
  1494 +
1470 case TARGET_NR_lchown32: 1495 case TARGET_NR_lchown32:
1471 case TARGET_NR_getuid32: 1496 case TARGET_NR_getuid32:
1472 case TARGET_NR_getgid32: 1497 case TARGET_NR_getgid32:
@@ -1490,7 +1515,20 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, @@ -1490,7 +1515,20 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
1490 case TARGET_NR_mincore: 1515 case TARGET_NR_mincore:
1491 case TARGET_NR_madvise: 1516 case TARGET_NR_madvise:
1492 case TARGET_NR_getdents64: 1517 case TARGET_NR_getdents64:
  1518 + goto unimplemented;
  1519 +#if TARGET_LONG_BITS == 32
1493 case TARGET_NR_fcntl64: 1520 case TARGET_NR_fcntl64:
  1521 + switch(arg2) {
  1522 + case F_GETLK64:
  1523 + case F_SETLK64:
  1524 + case F_SETLKW64:
  1525 + goto unimplemented;
  1526 + default:
  1527 + ret = get_errno(fcntl(arg1, arg2, arg3));
  1528 + break;
  1529 + }
  1530 + break;
  1531 +#endif
1494 case TARGET_NR_security: 1532 case TARGET_NR_security:
1495 goto unimplemented; 1533 goto unimplemented;
1496 case TARGET_NR_gettid: 1534 case TARGET_NR_gettid:
syscall-i386.h
@@ -245,24 +245,24 @@ @@ -245,24 +245,24 @@
245 struct target_stat { 245 struct target_stat {
246 unsigned short st_dev; 246 unsigned short st_dev;
247 unsigned short __pad1; 247 unsigned short __pad1;
248 - unsigned long st_ino; 248 + target_ulong st_ino;
249 unsigned short st_mode; 249 unsigned short st_mode;
250 unsigned short st_nlink; 250 unsigned short st_nlink;
251 unsigned short st_uid; 251 unsigned short st_uid;
252 unsigned short st_gid; 252 unsigned short st_gid;
253 unsigned short st_rdev; 253 unsigned short st_rdev;
254 unsigned short __pad2; 254 unsigned short __pad2;
255 - unsigned long st_size;  
256 - unsigned long st_blksize;  
257 - unsigned long st_blocks;  
258 - unsigned long st_atime;  
259 - unsigned long __unused1;  
260 - unsigned long st_mtime;  
261 - unsigned long __unused2;  
262 - unsigned long st_ctime;  
263 - unsigned long __unused3;  
264 - unsigned long __unused4;  
265 - unsigned long __unused5; 255 + target_ulong st_size;
  256 + target_ulong st_blksize;
  257 + target_ulong st_blocks;
  258 + target_ulong st_atime;
  259 + target_ulong __unused1;
  260 + target_ulong st_mtime;
  261 + target_ulong __unused2;
  262 + target_ulong st_ctime;
  263 + target_ulong __unused3;
  264 + target_ulong __unused4;
  265 + target_ulong __unused5;
266 }; 266 };
267 267
268 /* This matches struct stat64 in glibc2.1, hence the absolutely 268 /* This matches struct stat64 in glibc2.1, hence the absolutely
@@ -273,31 +273,31 @@ struct target_stat64 { @@ -273,31 +273,31 @@ struct target_stat64 {
273 unsigned char __pad0[10]; 273 unsigned char __pad0[10];
274 274
275 #define STAT64_HAS_BROKEN_ST_INO 1 275 #define STAT64_HAS_BROKEN_ST_INO 1
276 - unsigned long __st_ino; 276 + target_ulong __st_ino;
277 277
278 unsigned int st_mode; 278 unsigned int st_mode;
279 unsigned int st_nlink; 279 unsigned int st_nlink;
280 280
281 - unsigned long st_uid;  
282 - unsigned long st_gid; 281 + target_ulong st_uid;
  282 + target_ulong st_gid;
283 283
284 unsigned short st_rdev; 284 unsigned short st_rdev;
285 unsigned char __pad3[10]; 285 unsigned char __pad3[10];
286 286
287 long long st_size; 287 long long st_size;
288 - unsigned long st_blksize; 288 + target_ulong st_blksize;
289 289
290 - unsigned long st_blocks; /* Number 512-byte blocks allocated. */  
291 - unsigned long __pad4; /* future possible st_blocks high bits */ 290 + target_ulong st_blocks; /* Number 512-byte blocks allocated. */
  291 + target_ulong __pad4; /* future possible st_blocks high bits */
292 292
293 - unsigned long st_atime;  
294 - unsigned long __pad5; 293 + target_ulong st_atime;
  294 + target_ulong __pad5;
295 295
296 - unsigned long st_mtime;  
297 - unsigned long __pad6; 296 + target_ulong st_mtime;
  297 + target_ulong __pad6;
298 298
299 - unsigned long st_ctime;  
300 - unsigned long __pad7; /* will be high 32 bits of ctime someday */ 299 + target_ulong st_ctime;
  300 + target_ulong __pad7; /* will be high 32 bits of ctime someday */
301 301
302 unsigned long long st_ino; 302 unsigned long long st_ino;
303 }; 303 };