/* * sys/stat.h — POSIX-style stat() / fstat() over ESTEX file metadata. * * stat(path, &st) queries via ESTEX F_FIRST ($19) using the exact * name; gets size, attrib, and DOS-format date/time * that we expand to a struct stat. * fstat(fd, &st) queries an open handle: size via lseek(SEEK_END) * trick + date/time via ESTEX GET_D_T ($17). * * Sprinter has no inodes / owners / groups, so st_ino / st_uid / st_gid * are absent. S_ISREG and S_ISDIR are the only meaningful mode tests. */ #ifndef SYS_STAT_H #define SYS_STAT_H #include #include /* time_t */ /* File mode bits — POSIX subset (octal as per convention). */ #define S_IFMT 0170000 /* file-type mask */ #define S_IFREG 0100000 /* regular file */ #define S_IFDIR 0040000 /* directory */ #define S_IRUSR 0000400 /* owner read */ #define S_IWUSR 0000200 /* owner write */ #define S_IXUSR 0000100 /* owner execute */ #define S_IRWXU 0000700 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) struct stat { uint16_t st_mode; /* file type + perms */ uint32_t st_size; /* size in bytes */ time_t st_mtime; /* last-mod time (Unix epoch) */ }; int stat (const char *path, struct stat *buf); int fstat(int fd, struct stat *buf); #endif