1#include "koh_stat.h"23#include <sys/stat.h>45#if defined(__APPLE__)6#define KOH_SEC_NS(tv) ((long long)(tv).tv_sec * 1000000000LL + (long long)(tv).tv_nsec)7#define KOH_MTIME_NS(st) KOH_SEC_NS((st).st_mtimespec)8#define KOH_CTIME_NS(st) KOH_SEC_NS((st).st_ctimespec)9#else10#define KOH_SEC_NS(tv) ((long long)(tv).tv_sec * 1000000000LL + (long long)(tv).tv_nsec)11#define KOH_MTIME_NS(st) KOH_SEC_NS((st).st_mtim)12#define KOH_CTIME_NS(st) KOH_SEC_NS((st).st_ctim)13#endif1415int koh_lstat(const char *path, koh_stat *out) {16 struct stat st;17 if (lstat(path, &st) != 0) {18 out->kind = 0;19 return 0;20 }21 out->size = (long long)st.st_size;22 out->mtime_ns = KOH_MTIME_NS(st);23 out->ctime_ns = KOH_CTIME_NS(st);24 out->mode = (unsigned int)st.st_mode;25 switch (st.st_mode & S_IFMT) {26 case S_IFREG: out->kind = 1; break;27 case S_IFDIR: out->kind = 2; break;28 case S_IFLNK: out->kind = 3; break;29 default: out->kind = 4; break;30 }31 return 1;32}