stat.h revision 6b5559315d959347fcc01781669f771746cbb2ee
11dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project/* 21dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 31dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * All rights reserved. 41dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 51dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * Redistribution and use in source and binary forms, with or without 61dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * modification, are permitted provided that the following conditions 71dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * are met: 81dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions of source code must retain the above copyright 91dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer. 101dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 111dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * notice, this list of conditions and the following disclaimer in 121dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * the documentation and/or other materials provided with the 131dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * distribution. 141dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * 151dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 161dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 171dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 181dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 191dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 201dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 211dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 221dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 231dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 241dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 251dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 261dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project * SUCH DAMAGE. 271dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project */ 281dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#ifndef _SYS_STAT_H_ 291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#define _SYS_STAT_H_ 301dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 311dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/cdefs.h> 321dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/types.h> 331dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <sys/time.h> 341dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <linux/stat.h> 351dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 361dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#include <endian.h> 371dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 381dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__BEGIN_DECLS 391dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 40b8fa5b1ca9fc9b8b92875d2d9f33df3c8310aa09Elliott Hughes#if defined(__aarch64__) 41db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STAT64_BODY \ 42db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_dev; \ 43db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ino; \ 44db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_mode; \ 45db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_nlink; \ 466b5559315d959347fcc01781669f771746cbb2eeElliott Hughes uid_t st_uid; \ 476b5559315d959347fcc01781669f771746cbb2eeElliott Hughes gid_t st_gid; \ 48db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_rdev; \ 49db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long __pad1; \ 50db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_size; \ 51db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes int st_blksize; \ 52db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes int __pad2; \ 53db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_blocks; \ 54db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_atime; \ 55db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_atime_nsec; \ 56db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_mtime; \ 57db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_mtime_nsec; \ 58db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_ctime; \ 59db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ctime_nsec; \ 60db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int __unused4; \ 61db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int __unused5; \ 62db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 63b8fa5b1ca9fc9b8b92875d2d9f33df3c8310aa09Elliott Hughes#elif defined(__mips__) 64db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STAT64_BODY \ 65db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_dev; \ 66db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int __pad0[3]; \ 67db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long long st_ino; \ 68db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_mode; \ 69db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_nlink; \ 706b5559315d959347fcc01781669f771746cbb2eeElliott Hughes uid_t st_uid; \ 716b5559315d959347fcc01781669f771746cbb2eeElliott Hughes gid_t st_gid; \ 72db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_rdev; \ 73db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int __pad1[3]; \ 74db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long long st_size; \ 75db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_atime; \ 76db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_atime_nsec; \ 77db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_mtime; \ 78db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_mtime_nsec; \ 79db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_ctime; \ 80db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_ctime_nsec; \ 81db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_blksize; \ 82db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int __pad2; \ 83db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long long st_blocks; \ 84db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 85b8fa5b1ca9fc9b8b92875d2d9f33df3c8310aa09Elliott Hughes#elif defined(__x86_64__) 86db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STAT64_BODY \ 87db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_dev; \ 88db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ino; \ 89db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_nlink; \ 90db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_mode; \ 916b5559315d959347fcc01781669f771746cbb2eeElliott Hughes uid_t st_uid; \ 926b5559315d959347fcc01781669f771746cbb2eeElliott Hughes gid_t st_gid; \ 93db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int __pad0; \ 94db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_rdev; \ 95db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_size; \ 96db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_blksize; \ 97db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long st_blocks; \ 98db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_atime; \ 99db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_atime_nsec; \ 100db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_mtime; \ 101db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_mtime_nsec; \ 102db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ctime; \ 103db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ctime_nsec; \ 104db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long __pad3[3]; \ 105db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 1066437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#else 107db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define __STAT64_BODY \ 108db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long long st_dev; \ 109db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned char __pad0[4]; \ 110db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long __st_ino; \ 111db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_mode; \ 112db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned int st_nlink; \ 1136b5559315d959347fcc01781669f771746cbb2eeElliott Hughes uid_t st_uid; \ 1146b5559315d959347fcc01781669f771746cbb2eeElliott Hughes gid_t st_gid; \ 115db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long long st_rdev; \ 116db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned char __pad3[4]; \ 117db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes long long st_size; \ 118db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_blksize; \ 119db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long long st_blocks; \ 120db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_atime; \ 121db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_atime_nsec; \ 122db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_mtime; \ 123db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_mtime_nsec; \ 124db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ctime; \ 125db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long st_ctime_nsec; \ 126db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes unsigned long long st_ino; \ 127db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 1286437eac15a5b595ab26ef51834509c44695eb7e4Raghu Gandham#endif 1291dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 130db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesstruct stat { __STAT64_BODY }; 131db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesstruct stat64 { __STAT64_BODY }; 132db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 133db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define st_atimensec st_atime_nsec 134db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define st_mtimensec st_mtime_nsec 135db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define st_ctimensec st_ctime_nsec 13609baf4e881c78e67c7849aa81432ceb34e72e913David 'Digit' Turner 137f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist#ifdef __USE_BSD 138f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist/* Permission macros provided by glibc for compatibility with BSDs. */ 139f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO) /* 0777 */ 140f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist#define ALLPERMS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) /* 07777 */ 141f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist#define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */ 142f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist#endif 143f27b7fb0567a9cbb642be9d98298cb6668e7db39Hakan Kvist 144db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int chmod(const char*, mode_t); 145db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int fchmod(int, mode_t); 146db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int mkdir(const char*, mode_t); 1471dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 148db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int fstat(int, struct stat*); 149db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int fstat64(int, struct stat64*); 150db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int fstatat(int, const char*, struct stat*, int); 151db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int fstatat64(int, const char*, struct stat64*, int); 152db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int lstat(const char*, struct stat*); 153db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int lstat64(const char*, struct stat64*); 154db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int stat(const char*, struct stat*); 155db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int stat64(const char*, struct stat64*); 156db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes 157db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern int mknod(const char*, mode_t, dev_t); 1581dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Projectextern mode_t umask(mode_t); 1591dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 160a6cde392765eb955cb4be5faa6ee62dcf77e8aa5Nick Kralevich#if defined(__BIONIC_FORTIFY) 161cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich 162cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevichextern mode_t __umask_chk(mode_t); 163db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughesextern mode_t __umask_real(mode_t) __asm__(__USER_LABEL_PREFIX__ "umask"); 164a641c18f0c62c31f5678f8c159a74486010ea851Nick Kralevich__errordecl(__umask_invalid_mode, "umask called with invalid mode"); 165cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich 166cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich__BIONIC_FORTIFY_INLINE 167cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevichmode_t umask(mode_t mode) { 168a6cde392765eb955cb4be5faa6ee62dcf77e8aa5Nick Kralevich#if !defined(__clang__) 169cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich if (__builtin_constant_p(mode)) { 170cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich if ((mode & 0777) != mode) { 171a641c18f0c62c31f5678f8c159a74486010ea851Nick Kralevich __umask_invalid_mode(); 172cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich } 173cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich return __umask_real(mode); 174cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich } 175a6cde392765eb955cb4be5faa6ee62dcf77e8aa5Nick Kralevich#endif 176cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich return __umask_chk(mode); 177cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich} 178a6cde392765eb955cb4be5faa6ee62dcf77e8aa5Nick Kralevich#endif /* defined(__BIONIC_FORTIFY) */ 179cd587701c8590fb34bb69804b5d3b3c14d3d2508Nick Kralevich 180594b1a4af204aa9de2b4913182f4556e38d71648Elliott Hughesextern int mkfifo(const char*, mode_t); 1811dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 182f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int fchmodat(int, const char*, mode_t, int); 183f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int mkdirat(int, const char*, mode_t); 184f8fcfbc85a3ce3e195626b90736d3a484331494bElliott Hughesextern int mknodat(int, const char*, mode_t, dev_t); 1851dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 186db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define UTIME_NOW ((1L << 30) - 1L) 187db1ea3474899ebbd783aba872d3005f95a816d0fElliott Hughes#define UTIME_OMIT ((1L << 30) - 2L) 188d0be7c8f9a06b3ca8ea7647ea35c8f9dc63f0fe1Elliott Hughesextern int utimensat(int fd, const char *path, const struct timespec times[2], int flags); 189d0be7c8f9a06b3ca8ea7647ea35c8f9dc63f0fe1Elliott Hughesextern int futimens(int fd, const struct timespec times[2]); 190ae2d5ba31412c4f382ef405000baa866f35dd736Ken Sumrall 1911dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project__END_DECLS 1921dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project 1931dc9e472e19acfe6dc7f41e429236e7eef7ceda1The Android Open Source Project#endif /* _SYS_STAT_H_ */ 194