#ifndef STAT_H #define STAT_H /* stat.h - file metadata and filesystem totals. Header-only (one copy per program), like sock.h: the request block has to live in the caller's RAM. The kernel trap needs HL for its dispatch table, so a call with both a path and an output buffer passes a request block rather than two pointers. */ #include "gbos.h" #define ST_FILE 1 #define ST_DIR 2 struct gstat { unsigned char type; /* ST_FILE / ST_DIR */ unsigned char nlink; unsigned int size; /* bytes */ unsigned char ino; }; static unsigned char _sreq[7]; /* path ptr, then type/nlink/size/ino */ /* -> 1 on success, 0 if the path does not exist */ static unsigned char gstat(const char *path, struct gstat *st) { _sreq[0] = (unsigned char)(unsigned int)path; _sreq[1] = (unsigned char)(((unsigned int)path) >> 8); if (sys_stat(_sreq) != 0) return 0; st->type = _sreq[2]; st->nlink = _sreq[3]; st->size = (unsigned int)_sreq[4] | ((unsigned int)_sreq[5] << 8); st->ino = _sreq[6]; return 1; } /* out[] = { blocks total, blocks free, inodes total, inodes free } */ static void gfsstat(unsigned char *out) { sys_fsstat(out); } #endif