// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab #ifndef CEPH_STATLITE_H #define CEPH_STATLITE_H extern "C" { #include #include #include #include #include struct statlite { dev_t st_dev; /* device */ ino_t st_ino; /* inode */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device type (if inode device)*/ unsigned long st_litemask; /* bit mask for optional fields */ /***************************************************************/ /**** Remaining fields are optional according to st_litemask ***/ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for filesystem I/O */ blkcnt_t st_blocks; /* number of blocks allocated */ struct timespec st_atim; /* Time of last access. */ struct timespec st_mtim; /* Time of last modification. */ struct timespec st_ctim; /* Time of last status change. */ //time_t st_atime; /* time of last access */ //time_t st_mtime; /* time of last modification */ //time_t st_ctime; /* time of last change */ }; #define S_STATLITE_SIZE 1 #define S_STATLITE_BLKSIZE 2 #define S_STATLITE_BLOCKS 4 #define S_STATLITE_ATIME 8 #define S_STATLITE_MTIME 16 #define S_STATLITE_CTIME 32 #define S_REQUIRESIZE(m) (m | S_STATLITE_SIZE) #define S_REQUIREBLKSIZE(m) (m | S_STATLITE_BLKSIZE) #define S_REQUIREBLOCKS(m) (m | S_STATLITE_BLOCKS) #define S_REQUIREATIME(m) (m | S_STATLITE_ATIME) #define S_REQUIREMTIME(m) (m | S_STATLITE_MTIME) #define S_REQUIRECTIME(m) (m | S_STATLITE_CTIME) #define S_ISVALIDSIZE(m) (m & S_STATLITE_SIZE) #define S_ISVALIDBLKSIZE(m) (m & S_STATLITE_BLKSIZE) #define S_ISVALIDBLOCKS(m) (m & S_STATLITE_BLOCKS) #define S_ISVALIDATIME(m) (m & S_STATLITE_ATIME) #define S_ISVALIDMTIME(m) (m & S_STATLITE_MTIME) #define S_ISVALIDCTIME(m) (m & S_STATLITE_CTIME) // readdirplus etc. struct dirent_plus { struct dirent d_dirent; /* dirent struct for this entry */ struct stat d_stat; /* attributes for this entry */ int d_stat_err;/* errno for d_stat, or 0 */ }; struct dirent_lite { struct dirent d_dirent; /* dirent struct for this entry */ struct statlite d_stat; /* attributes for this entry */ int d_stat_err;/* errno for d_stat, or 0 */ }; } #endif