diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 20:36:49 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 20:36:49 +0100 |
| commit | 70ad747a9c6d5f86d9bbb97406f44d3af128d528 (patch) | |
| tree | 784b8684ac26010822842259ea95e378cb6bae7e /src/wrapped/wrappedlibc.c | |
| parent | ce322774d8ef2ee343bfb67695fc246e4f12b457 (diff) | |
| download | box64-70ad747a9c6d5f86d9bbb97406f44d3af128d528.tar.gz box64-70ad747a9c6d5f86d9bbb97406f44d3af128d528.zip | |
Aligned struct stat64 for fxstat(64) also
Diffstat (limited to 'src/wrapped/wrappedlibc.c')
| -rwxr-xr-x | src/wrapped/wrappedlibc.c | 98 |
1 files changed, 2 insertions, 96 deletions
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c index 4dbf4136..54354e83 100755 --- a/src/wrapped/wrappedlibc.c +++ b/src/wrapped/wrappedlibc.c @@ -899,106 +899,12 @@ EXPORT void my__ITM_addUserCommitAction(x64emu_t* emu, void* cb, uint32_t b, voi EXPORT void my__ITM_registerTMCloneTable(x64emu_t* emu, void* p, uint32_t s) {} EXPORT void my__ITM_deregisterTMCloneTable(x64emu_t* emu, void* p) {} -#if 0 -struct i386_stat { - uint64_t st_dev; - uint32_t __pad1; - uint32_t st_ino; - uint32_t st_mode; - uint32_t st_nlink; - uint32_t st_uid; - uint32_t st_gid; - uint64_t st_rdev; - uint32_t __pad2; - int32_t st_size; - int32_t st_blksize; - int32_t st_blocks; - int32_t st_atime_sec; - uint32_t st_atime_nsec; - int32_t st_mtime_sec; - uint32_t st_mtime_nsec; - int32_t st_ctime_sec; - uint32_t st_ctime_nsec; - uint32_t __unused4; - uint32_t __unused5; -} __attribute__((packed)); - -static int FillStatFromStat64(int vers, const struct stat64 *st64, void *st32) -{ - struct i386_stat *i386st = (struct i386_stat *)st32; - - if (vers != 3) - { - errno = EINVAL; - return -1; - } - - i386st->st_dev = st64->st_dev; - i386st->__pad1 = 0; - if (fix_64bit_inodes) - { - i386st->st_ino = st64->st_ino ^ (st64->st_ino >> 32); - } - else - { - i386st->st_ino = st64->st_ino; - if ((st64->st_ino >> 32) != 0) - { - errno = EOVERFLOW; - return -1; - } - } - i386st->st_mode = st64->st_mode; - i386st->st_nlink = st64->st_nlink; - i386st->st_uid = st64->st_uid; - i386st->st_gid = st64->st_gid; - i386st->st_rdev = st64->st_rdev; - i386st->__pad2 = 0; - i386st->st_size = st64->st_size; - if ((i386st->st_size >> 31) != (int32_t)(st64->st_size >> 32)) - { - errno = EOVERFLOW; - return -1; - } - i386st->st_blksize = st64->st_blksize; - i386st->st_blocks = st64->st_blocks; - if ((i386st->st_blocks >> 31) != (int32_t)(st64->st_blocks >> 32)) - { - errno = EOVERFLOW; - return -1; - } - i386st->st_atime_sec = st64->st_atim.tv_sec; - i386st->st_atime_nsec = st64->st_atim.tv_nsec; - i386st->st_mtime_sec = st64->st_mtim.tv_sec; - i386st->st_mtime_nsec = st64->st_mtim.tv_nsec; - i386st->st_ctime_sec = st64->st_ctim.tv_sec; - i386st->st_ctime_nsec = st64->st_ctim.tv_nsec; - i386st->__unused4 = 0; - i386st->__unused5 = 0; - return 0; -} EXPORT int my___fxstat(x64emu_t *emu, int vers, int fd, void* buf) { - if (vers == 1) - { - static iFiip_t f = NULL; - if(!f) { - library_t* lib = my_lib; - if(!lib) - { - errno = EINVAL; - return -1; - } - f = (iFiip_t)dlsym(lib->priv.w.lib, "__fxstat"); - } - - return f(vers, fd, buf); - } struct stat64 st; int r = fstat64(fd, &st); - if (r) return r; - r = FillStatFromStat64(vers, &st, buf); + UnalignStat64(&st, buf); return r; } @@ -1010,7 +916,7 @@ EXPORT int my___fxstat64(x64emu_t *emu, int vers, int fd, void* buf) UnalignStat64(&st, buf); return r; } -#endif + EXPORT int my___xstat(x64emu_t* emu, int v, void* path, void* buf) { struct stat64 st; |