Implement some of the missing LFS64 support.
This gives us: * <dirent.h> struct dirent64 readdir64, readdir64_r, alphasort64, scandir64 * <fcntl.h> creat64, openat64, open64. * <sys/stat.h> struct stat64 fstat64, fstatat64, lstat64, stat64. * <sys/statvfs.h> struct statvfs64 statvfs64, fstatvfs64. * <sys/vfs.h> struct statfs64 statfs64, fstatfs64. This also removes some of the incorrect #define hacks we've had in the past (for stat64, for example, which we promised to clean up way back in bug 8472078). Bug: 11865851 Bug: 8472078 Change-Id: Ia46443521918519f2dfa64d4621027dfd13ac566
This commit is contained in:
@@ -38,101 +38,101 @@
|
||||
__BEGIN_DECLS
|
||||
|
||||
#if defined(__aarch64__)
|
||||
struct stat {
|
||||
unsigned long st_dev;
|
||||
unsigned long st_ino;
|
||||
unsigned int st_mode;
|
||||
unsigned int st_nlink;
|
||||
unsigned int st_uid;
|
||||
unsigned int st_gid;
|
||||
unsigned long st_rdev;
|
||||
unsigned long __pad1;
|
||||
long st_size;
|
||||
int st_blksize;
|
||||
int __pad2;
|
||||
long st_blocks;
|
||||
long st_atime;
|
||||
unsigned long st_atime_nsec;
|
||||
long st_mtime;
|
||||
unsigned long st_mtime_nsec;
|
||||
long st_ctime;
|
||||
unsigned long st_ctime_nsec;
|
||||
unsigned int __unused4;
|
||||
unsigned int __unused5;
|
||||
};
|
||||
#define __STAT64_BODY \
|
||||
unsigned long st_dev; \
|
||||
unsigned long st_ino; \
|
||||
unsigned int st_mode; \
|
||||
unsigned int st_nlink; \
|
||||
unsigned int st_uid; \
|
||||
unsigned int st_gid; \
|
||||
unsigned long st_rdev; \
|
||||
unsigned long __pad1; \
|
||||
long st_size; \
|
||||
int st_blksize; \
|
||||
int __pad2; \
|
||||
long st_blocks; \
|
||||
long st_atime; \
|
||||
unsigned long st_atime_nsec; \
|
||||
long st_mtime; \
|
||||
unsigned long st_mtime_nsec; \
|
||||
long st_ctime; \
|
||||
unsigned long st_ctime_nsec; \
|
||||
unsigned int __unused4; \
|
||||
unsigned int __unused5; \
|
||||
|
||||
#elif defined(__mips__)
|
||||
struct stat {
|
||||
unsigned int st_dev;
|
||||
unsigned int __pad0[3];
|
||||
unsigned long long st_ino;
|
||||
unsigned int st_mode;
|
||||
unsigned int st_nlink;
|
||||
unsigned int st_uid;
|
||||
unsigned int st_gid;
|
||||
unsigned int st_rdev;
|
||||
unsigned int __pad1[3];
|
||||
long long st_size;
|
||||
unsigned int st_atime;
|
||||
unsigned int st_atime_nsec;
|
||||
unsigned int st_mtime;
|
||||
unsigned int st_mtime_nsec;
|
||||
unsigned int st_ctime;
|
||||
unsigned int st_ctime_nsec;
|
||||
unsigned int st_blksize;
|
||||
unsigned int __pad2;
|
||||
unsigned long long st_blocks;
|
||||
};
|
||||
#define __STAT64_BODY \
|
||||
unsigned int st_dev; \
|
||||
unsigned int __pad0[3]; \
|
||||
unsigned long long st_ino; \
|
||||
unsigned int st_mode; \
|
||||
unsigned int st_nlink; \
|
||||
unsigned int st_uid; \
|
||||
unsigned int st_gid; \
|
||||
unsigned int st_rdev; \
|
||||
unsigned int __pad1[3]; \
|
||||
long long st_size; \
|
||||
unsigned int st_atime; \
|
||||
unsigned int st_atime_nsec; \
|
||||
unsigned int st_mtime; \
|
||||
unsigned int st_mtime_nsec; \
|
||||
unsigned int st_ctime; \
|
||||
unsigned int st_ctime_nsec; \
|
||||
unsigned int st_blksize; \
|
||||
unsigned int __pad2; \
|
||||
unsigned long long st_blocks; \
|
||||
|
||||
#elif defined(__x86_64__)
|
||||
struct stat {
|
||||
unsigned long st_dev;
|
||||
unsigned long st_ino;
|
||||
unsigned long st_nlink;
|
||||
unsigned int st_mode;
|
||||
unsigned int st_uid;
|
||||
unsigned int st_gid;
|
||||
unsigned int __pad0;
|
||||
unsigned long st_rdev;
|
||||
long st_size;
|
||||
long st_blksize;
|
||||
long st_blocks;
|
||||
unsigned long st_atime;
|
||||
unsigned long st_atime_nsec;
|
||||
unsigned long st_mtime;
|
||||
unsigned long st_mtime_nsec;
|
||||
unsigned long st_ctime;
|
||||
unsigned long st_ctime_nsec;
|
||||
long __pad3[3];
|
||||
};
|
||||
#define __STAT64_BODY \
|
||||
unsigned long st_dev; \
|
||||
unsigned long st_ino; \
|
||||
unsigned long st_nlink; \
|
||||
unsigned int st_mode; \
|
||||
unsigned int st_uid; \
|
||||
unsigned int st_gid; \
|
||||
unsigned int __pad0; \
|
||||
unsigned long st_rdev; \
|
||||
long st_size; \
|
||||
long st_blksize; \
|
||||
long st_blocks; \
|
||||
unsigned long st_atime; \
|
||||
unsigned long st_atime_nsec; \
|
||||
unsigned long st_mtime; \
|
||||
unsigned long st_mtime_nsec; \
|
||||
unsigned long st_ctime; \
|
||||
unsigned long st_ctime_nsec; \
|
||||
long __pad3[3]; \
|
||||
|
||||
#else
|
||||
struct stat {
|
||||
unsigned long long st_dev;
|
||||
unsigned char __pad0[4];
|
||||
unsigned long __st_ino;
|
||||
unsigned int st_mode;
|
||||
unsigned int st_nlink;
|
||||
unsigned long st_uid;
|
||||
unsigned long st_gid;
|
||||
unsigned long long st_rdev;
|
||||
unsigned char __pad3[4];
|
||||
long long st_size;
|
||||
unsigned long st_blksize;
|
||||
unsigned long long st_blocks;
|
||||
unsigned long st_atime;
|
||||
unsigned long st_atime_nsec;
|
||||
unsigned long st_mtime;
|
||||
unsigned long st_mtime_nsec;
|
||||
unsigned long st_ctime;
|
||||
unsigned long st_ctime_nsec;
|
||||
unsigned long long st_ino;
|
||||
};
|
||||
#define __STAT64_BODY \
|
||||
unsigned long long st_dev; \
|
||||
unsigned char __pad0[4]; \
|
||||
unsigned long __st_ino; \
|
||||
unsigned int st_mode; \
|
||||
unsigned int st_nlink; \
|
||||
unsigned long st_uid; \
|
||||
unsigned long st_gid; \
|
||||
unsigned long long st_rdev; \
|
||||
unsigned char __pad3[4]; \
|
||||
long long st_size; \
|
||||
unsigned long st_blksize; \
|
||||
unsigned long long st_blocks; \
|
||||
unsigned long st_atime; \
|
||||
unsigned long st_atime_nsec; \
|
||||
unsigned long st_mtime; \
|
||||
unsigned long st_mtime_nsec; \
|
||||
unsigned long st_ctime; \
|
||||
unsigned long st_ctime_nsec; \
|
||||
unsigned long long st_ino; \
|
||||
|
||||
#endif
|
||||
|
||||
/* For compatibility with GLibc, we provide macro aliases
|
||||
* for the non-Posix nano-seconds accessors.
|
||||
*/
|
||||
#define st_atimensec st_atime_nsec
|
||||
#define st_mtimensec st_mtime_nsec
|
||||
#define st_ctimensec st_ctime_nsec
|
||||
struct stat { __STAT64_BODY };
|
||||
struct stat64 { __STAT64_BODY };
|
||||
|
||||
#define st_atimensec st_atime_nsec
|
||||
#define st_mtimensec st_mtime_nsec
|
||||
#define st_ctimensec st_ctime_nsec
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* Permission macros provided by glibc for compatibility with BSDs. */
|
||||
@@ -141,21 +141,26 @@ struct stat {
|
||||
#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */
|
||||
#endif
|
||||
|
||||
extern int chmod(const char *, mode_t);
|
||||
extern int fchmod(int, mode_t);
|
||||
extern int mkdir(const char *, mode_t);
|
||||
extern int chmod(const char*, mode_t);
|
||||
extern int fchmod(int, mode_t);
|
||||
extern int mkdir(const char*, mode_t);
|
||||
|
||||
extern int stat(const char *, struct stat *);
|
||||
extern int fstat(int, struct stat *);
|
||||
extern int lstat(const char *, struct stat *);
|
||||
extern int mknod(const char *, mode_t, dev_t);
|
||||
extern int fstat(int, struct stat*);
|
||||
extern int fstat64(int, struct stat64*);
|
||||
extern int fstatat(int, const char*, struct stat*, int);
|
||||
extern int fstatat64(int, const char*, struct stat64*, int);
|
||||
extern int lstat(const char*, struct stat*);
|
||||
extern int lstat64(const char*, struct stat64*);
|
||||
extern int stat(const char*, struct stat*);
|
||||
extern int stat64(const char*, struct stat64*);
|
||||
|
||||
extern int mknod(const char*, mode_t, dev_t);
|
||||
extern mode_t umask(mode_t);
|
||||
|
||||
#if defined(__BIONIC_FORTIFY)
|
||||
|
||||
extern mode_t __umask_chk(mode_t);
|
||||
extern mode_t __umask_real(mode_t)
|
||||
__asm__(__USER_LABEL_PREFIX__ "umask");
|
||||
extern mode_t __umask_real(mode_t) __asm__(__USER_LABEL_PREFIX__ "umask");
|
||||
__errordecl(__umask_invalid_mode, "umask called with invalid mode");
|
||||
|
||||
__BIONIC_FORTIFY_INLINE
|
||||
@@ -172,20 +177,14 @@ mode_t umask(mode_t mode) {
|
||||
}
|
||||
#endif /* defined(__BIONIC_FORTIFY) */
|
||||
|
||||
|
||||
#define stat64 stat
|
||||
#define fstat64 fstat
|
||||
#define lstat64 lstat
|
||||
|
||||
extern int mkfifo(const char*, mode_t);
|
||||
|
||||
extern int fchmodat(int, const char*, mode_t, int);
|
||||
extern int fstatat(int, const char*, struct stat*, int);
|
||||
extern int mkdirat(int, const char*, mode_t);
|
||||
extern int mknodat(int, const char*, mode_t, dev_t);
|
||||
|
||||
# define UTIME_NOW ((1l << 30) - 1l)
|
||||
# define UTIME_OMIT ((1l << 30) - 2l)
|
||||
#define UTIME_NOW ((1L << 30) - 1L)
|
||||
#define UTIME_OMIT ((1L << 30) - 2L)
|
||||
extern int utimensat(int fd, const char *path, const struct timespec times[2], int flags);
|
||||
extern int futimens(int fd, const struct timespec times[2]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user