posix.c - scc - simple c99 compiler (HTM) git clone git://git.simple-cc.org/scc (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules (DIR) README (DIR) LICENSE --- posix.c (947B) --- 1 #include <sys/types.h> 2 #include <sys/time.h> 3 #include <sys/stat.h> 4 #include <string.h> 5 #include <unistd.h> 6 #include <utime.h> 7 8 #include <limits.h> 9 10 #include "sys.h" 11 12 const char invalidchars[] = " "; 13 14 time_t 15 totime(long long t) 16 { 17 return t; 18 } 19 20 char * 21 canonical(char *path) 22 { 23 char *name = strrchr(path, '/'); 24 return (name && name[1]) ? name+1 : path; 25 } 26 27 int 28 getstat(char *fname, struct fprop *prop) 29 { 30 struct stat st; 31 32 if (stat(fname, &st) < 0) 33 return -1; 34 if (st.st_size > LONG_MAX) 35 return -1; 36 prop->uid = st.st_uid; 37 prop->gid = st.st_gid; 38 prop->mode = st.st_mode; 39 prop->time = st.st_mtime; 40 prop->size = st.st_size; 41 42 return 0; 43 } 44 45 int 46 setstat(char *fname, struct fprop *prop) 47 { 48 struct utimbuf ut = {prop->time, prop->time}; 49 50 if (chown(fname, prop->uid, prop->gid) < 0) { 51 if (chown(fname, getuid(), getgid()) < 0) 52 return -1; 53 } 54 if (chmod(fname, prop->mode) < 0) 55 return -1; 56 if (utime(fname, &ut) < 0) 57 return -1; 58 return 0; 59 }