|
|
1.1 ! root 1: #include "mk.h" ! 2: #include <sys/types.h> ! 3: #include <sys/stat.h> ! 4: #include <errno.h> ! 5: ! 6: #define MYSEP(s) ((*s == ' ') || (*s == ',') || (*s == '\n')) ! 7: ! 8: timeinit(s) ! 9: register char *s; ! 10: { ! 11: register long t; ! 12: register char *os; ! 13: ! 14: for(t = time((long *)0); *s; s = os){ ! 15: for(os = s; !MYSEP(os); os++) ! 16: if(*os == 0){ ! 17: symlook(strdup(s), S_TIME, (char *)t)->value = (char *)t; ! 18: return; ! 19: } ! 20: *os++ = 0; ! 21: symlook(strdup(s), S_TIME, (char *)t)->value = (char *)t; ! 22: while(MYSEP(os)) ! 23: os++; ! 24: } ! 25: } ! 26: ! 27: long ! 28: ftimeof(force, name) ! 29: char *name; ! 30: { ! 31: struct stat sbuf; ! 32: Symtab *sym; ! 33: ! 34: if(!force && (sym = symlook(name, S_TIME, (char *)0))){ ! 35: return((long)sym->value); ! 36: } ! 37: if(stat(name, &sbuf) < 0) ! 38: sbuf.st_mtime = 0; ! 39: symlook(name, S_TIME, (char *)sbuf.st_mtime); ! 40: return((long)sbuf.st_mtime); ! 41: } ! 42: ! 43: void ! 44: ftouch(name) ! 45: char *name; ! 46: { ! 47: int fd; ! 48: char buf[1]; ! 49: struct stat sbuf; ! 50: ! 51: if(stat(name, &sbuf) < 0) /* not there and zero length are same case */ ! 52: sbuf.st_size = 0; ! 53: if(sbuf.st_size == 0){ ! 54: if((fd = creat(name, 0666)) < 0){ ! 55: bad: ! 56: perror(name); ! 57: Exit(); ! 58: } ! 59: close(fd); ! 60: return; ! 61: } ! 62: if((fd = open(name, 2)) < 0) ! 63: goto bad; ! 64: if(read(fd, buf, 1) != 1) ! 65: goto bad; ! 66: if(lseek(fd, 0L, 0) < 0) ! 67: goto bad; ! 68: if(write(fd, buf, 1) != 1) ! 69: goto bad; ! 70: close(fd); ! 71: } ! 72: ! 73: void ! 74: fdelete(s) ! 75: char *s; ! 76: { ! 77: if(unlink(s) < 0) ! 78: perror(s); ! 79: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.