#include "koh_stat.h" #include #if defined(__APPLE__) #define KOH_SEC_NS(tv) ((long long)(tv).tv_sec * 1000000000LL + (long long)(tv).tv_nsec) #define KOH_MTIME_NS(st) KOH_SEC_NS((st).st_mtimespec) #define KOH_CTIME_NS(st) KOH_SEC_NS((st).st_ctimespec) #else #define KOH_SEC_NS(tv) ((long long)(tv).tv_sec * 1000000000LL + (long long)(tv).tv_nsec) #define KOH_MTIME_NS(st) KOH_SEC_NS((st).st_mtim) #define KOH_CTIME_NS(st) KOH_SEC_NS((st).st_ctim) #endif int koh_lstat(const char *path, koh_stat *out) { struct stat st; if (lstat(path, &st) != 0) { out->kind = 0; return 0; } out->size = (long long)st.st_size; out->mtime_ns = KOH_MTIME_NS(st); out->ctime_ns = KOH_CTIME_NS(st); out->mode = (unsigned int)st.st_mode; switch (st.st_mode & S_IFMT) { case S_IFREG: out->kind = 1; break; case S_IFDIR: out->kind = 2; break; case S_IFLNK: out->kind = 3; break; default: out->kind = 4; break; } return 1; }