/*
 * 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 <stdint.h>
#include <time.h>      /* 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
