aboutsummaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2018-02-12 15:48:01 -0800
committerElliott Hughes <enh@google.com>2018-02-12 15:48:01 -0800
commit25f17e48df2e5e9e88b0c5cd2ebeded33c7cedc0 (patch)
treef117b124c5aa047b3a4d922526040b8c894aef7c /libc
parent919dd9dcb4ca547a67079b85494236cd5f680598 (diff)
downloadandroid_bionic-25f17e48df2e5e9e88b0c5cd2ebeded33c7cedc0.tar.gz
android_bionic-25f17e48df2e5e9e88b0c5cd2ebeded33c7cedc0.tar.bz2
android_bionic-25f17e48df2e5e9e88b0c5cd2ebeded33c7cedc0.zip
Better backwards compatibility for stat64.
Caused problems for some Google source switching to unified headers because the legacy headers just used #define instead. Bug: http://b/73210428 Test: builds Change-Id: If8a36f284031e57af419903610029a8c34a23d91
Diffstat (limited to 'libc')
-rw-r--r--libc/Android.bp1
-rw-r--r--libc/include/ftw.h8
-rw-r--r--libc/include/sys/cdefs.h10
-rw-r--r--libc/include/sys/stat.h8
4 files changed, 18 insertions, 9 deletions
diff --git a/libc/Android.bp b/libc/Android.bp
index 13e17fe32..f5491f5ac 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -33,6 +33,7 @@ libc_common_src_files_32 = [
libc_common_flags = [
"-D_LIBC=1",
+ "-D__BIONIC_LP32_USE_STAT64",
"-Wall",
"-Wextra",
"-Wunused",
diff --git a/libc/include/ftw.h b/libc/include/ftw.h
index 300f6243f..a2896431a 100644
--- a/libc/include/ftw.h
+++ b/libc/include/ftw.h
@@ -56,11 +56,9 @@ struct FTW {
__BEGIN_DECLS
int ftw(const char* __dir_path, int (*__callback)(const char*, const struct stat*, int), int __max_fd_count) __INTRODUCED_IN(17);
-int nftw(const char* __dir_path, int (*__callback)(const char*, const struct stat*, int, struct FTW*), int __max_fd_count, int __flags)
- __INTRODUCED_IN(17);
-int ftw64(const char* __dir_path, int (*__callback)(const char*, const struct stat64*, int), int __max_fd_count) __INTRODUCED_IN(21);
-int nftw64(const char* __dir_path, int (*__callback)(const char*, const struct stat64*, int, struct FTW*), int __max_fd_count, int __flags)
- __INTRODUCED_IN(21);
+int nftw(const char* __dir_path, int (*__callback)(const char*, const struct stat*, int, struct FTW*), int __max_fd_count, int __flags) __INTRODUCED_IN(17);
+int ftw64(const char* __dir_path, int (*__callback)(const char*, const struct stat64*, int), int __max_fd_count) __RENAME_STAT64(ftw, 17, 21);
+int nftw64(const char* __dir_path, int (*__callback)(const char*, const struct stat64*, int, struct FTW*), int __max_fd_count, int __flags) __RENAME_STAT64(nftw, 17, 21);
__END_DECLS
#endif
diff --git a/libc/include/sys/cdefs.h b/libc/include/sys/cdefs.h
index 27952b90a..26dd9a2e3 100644
--- a/libc/include/sys/cdefs.h
+++ b/libc/include/sys/cdefs.h
@@ -245,6 +245,16 @@
#define __RENAME_LDBL(rewrite,rewrite_api_level,regular_api_level) __RENAME(rewrite) __INTRODUCED_IN(rewrite_api_level)
#endif
+/*
+ * On all architectures, `struct stat` == `struct stat64`, but LP32 didn't gain the *64 functions
+ * until API level 21.
+ */
+#if defined(__LP64__) || defined(__BIONIC_LP32_USE_STAT64)
+#define __RENAME_STAT64(rewrite,rewrite_api_level,regular_api_level) __INTRODUCED_IN(regular_api_level)
+#else
+#define __RENAME_STAT64(rewrite,rewrite_api_level,regular_api_level) __RENAME(rewrite) __INTRODUCED_IN(rewrite_api_level)
+#endif
+
/* glibc compatibility. */
#if defined(__LP64__)
#define __WORDSIZE 64
diff --git a/libc/include/sys/stat.h b/libc/include/sys/stat.h
index 6fce0a5ac..84a50152a 100644
--- a/libc/include/sys/stat.h
+++ b/libc/include/sys/stat.h
@@ -156,13 +156,13 @@ int fchmod(int __fd, mode_t __mode);
int mkdir(const char* __path, mode_t __mode);
int fstat(int __fd, struct stat* __buf);
-int fstat64(int __fd, struct stat64* __buf) __INTRODUCED_IN(21);
+int fstat64(int __fd, struct stat64* __buf) __RENAME_STAT64(fstat, 3, 21);
int fstatat(int __dir_fd, const char* __path, struct stat* __buf, int __flags);
-int fstatat64(int __dir_fd, const char* __path, struct stat64* __buf, int __flags) __INTRODUCED_IN(21);
+int fstatat64(int __dir_fd, const char* __path, struct stat64* __buf, int __flags) __RENAME_STAT64(fstatat, 3, 21);
int lstat(const char* __path, struct stat* __buf);
-int lstat64(const char* __path, struct stat64* __buf) __INTRODUCED_IN(21);
+int lstat64(const char* __path, struct stat64* __buf) __RENAME_STAT64(lstat, 3, 21);
int stat(const char* __path, struct stat* __buf);
-int stat64(const char* __path, struct stat64* __buf) __INTRODUCED_IN(21);
+int stat64(const char* __path, struct stat64* __buf) __RENAME_STAT64(stat, 3, 21);
int mknod(const char* __path, mode_t __mode, dev_t __dev);
mode_t umask(mode_t __mask);