diff options
Diffstat (limited to 'toolchain/uClibc/patches/fastat-64bithost.patch')
-rw-r--r-- | toolchain/uClibc/patches/fastat-64bithost.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/toolchain/uClibc/patches/fastat-64bithost.patch b/toolchain/uClibc/patches/fastat-64bithost.patch new file mode 100644 index 000000000..dee068d00 --- /dev/null +++ b/toolchain/uClibc/patches/fastat-64bithost.patch @@ -0,0 +1,79 @@ +diff -Nur uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/fstatat64.c uClibc-0.9.30.2/libc/sysdeps/linux/common/fstatat64.c +--- uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/fstatat64.c 2010-01-13 22:22:31.000000000 +0100 ++++ uClibc-0.9.30.2/libc/sysdeps/linux/common/fstatat64.c 2010-01-23 11:55:14.000000000 +0100 +@@ -12,6 +12,11 @@ + + #ifdef __UCLIBC_HAS_LFS__ + ++/* 64bit ports tend to favor newfstatat() */ ++#ifdef __NR_newfstatat ++# define __NR_fstatat64 __NR_newfstatat ++#endif ++ + #ifdef __NR_fstatat64 + int fstatat64(int fd, const char *file, struct stat64 *buf, int flag) + { +diff -Nur uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/fstatat.c uClibc-0.9.30.2/libc/sysdeps/linux/common/fstatat.c +--- uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/fstatat.c 2010-01-13 22:22:31.000000000 +0100 ++++ uClibc-0.9.30.2/libc/sysdeps/linux/common/fstatat.c 2010-01-23 11:54:50.000000000 +0100 +@@ -10,15 +10,20 @@ + #include <sys/stat.h> + #include "xstatconv.h" + ++/* 64bit ports tend to favor newfstatat() */ ++#ifdef __NR_newfstatat ++# define __NR_fstatat64 __NR_newfstatat ++#endif ++ + #ifdef __NR_fstatat64 + int fstatat(int fd, const char *file, struct stat *buf, int flag) + { + int ret; +- struct kernel_stat kbuf; ++ struct kernel_stat64 kbuf; + + ret = INLINE_SYSCALL(fstatat64, 4, fd, file, &kbuf, flag); + if (ret == 0) +- __xstat_conv(&kbuf, buf); ++ __xstat32_conv(&kbuf, buf); + + return ret; + } +diff -Nur uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/xstatconv.c uClibc-0.9.30.2/libc/sysdeps/linux/common/xstatconv.c +--- uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/xstatconv.c 2010-01-13 22:22:31.000000000 +0100 ++++ uClibc-0.9.30.2/libc/sysdeps/linux/common/xstatconv.c 2010-01-23 11:56:07.000000000 +0100 +@@ -70,4 +70,23 @@ + buf->st_ctim = kbuf->st_ctim; + } + ++void __xstat32_conv(struct kernel_stat64 *kbuf, struct stat *buf) ++{ ++ /* Convert to current kernel version of `struct stat64'. */ ++ memset(buf, 0x00, sizeof(*buf)); ++ buf->st_dev = kbuf->st_dev; ++ buf->st_ino = kbuf->st_ino; ++ buf->st_mode = kbuf->st_mode; ++ buf->st_nlink = kbuf->st_nlink; ++ buf->st_uid = kbuf->st_uid; ++ buf->st_gid = kbuf->st_gid; ++ buf->st_rdev = kbuf->st_rdev; ++ buf->st_size = kbuf->st_size; ++ buf->st_blksize = kbuf->st_blksize; ++ buf->st_blocks = kbuf->st_blocks; ++ buf->st_atim = kbuf->st_atim; ++ buf->st_mtim = kbuf->st_mtim; ++ buf->st_ctim = kbuf->st_ctim; ++} ++ + #endif /* __UCLIBC_HAS_LFS__ */ +diff -Nur uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/xstatconv.h uClibc-0.9.30.2/libc/sysdeps/linux/common/xstatconv.h +--- uClibc-0.9.30.2.orig/libc/sysdeps/linux/common/xstatconv.h 2010-01-13 22:22:31.000000000 +0100 ++++ uClibc-0.9.30.2/libc/sysdeps/linux/common/xstatconv.h 2010-01-23 11:56:38.000000000 +0100 +@@ -26,6 +26,7 @@ + #include <bits/kernel_stat.h> + + extern void __xstat_conv(struct kernel_stat *kbuf, struct stat *buf) attribute_hidden; ++extern void __xstat32_conv(struct kernel_stat64 *kbuf, struct stat *buf) attribute_hidden; + #if defined __UCLIBC_HAS_LFS__ + extern void __xstat64_conv(struct kernel_stat64 *kbuf, struct stat64 *buf) attribute_hidden; + #endif |