1 #include "mk.h" 2 3 /* table-driven version in bootes dump of 12/31/96 */ 4 5 long 6 mtime(char *name) 7 { 8 return mkmtime(name, 1); 9 } 10 11 long 12 timeof(char *name, int force) 13 { 14 Symtab *sym; 15 long t; 16 17 if(utfrune(name, '(')) 18 return atimeof(force, name); /* archive */ 19 20 if(force) 21 return mtime(name); 22 23 sym = symlook(name, S_TIME, 0); 24 if (sym) 25 return sym->u.value; /* uggh */ 26 27 t = mkmtime(name, 0); 28 if(t == 0) 29 return 0; 30 31 symlook(name, S_TIME, (void*)t); /* install time in cache */ 32 return t; 33 } 34 35 void 36 touch(char *name) 37 { 38 Bprint(&bout, "touch(%s)\n", name); 39 if(nflag) 40 return; 41 42 if(utfrune(name, '(')) 43 atouch(name); /* archive */ 44 else if(chgtime(name) < 0) { 45 perror(name); 46 Exit(); 47 } 48 } 49 50 void 51 delete(char *name) 52 { 53 if(utfrune(name, '(') == 0) { /* file */ 54 if(remove(name) < 0) 55 perror(name); 56 } else 57 fprint(2, "hoon off; mk can'tdelete archive members\n"); 58 } 59 60 void 61 timeinit(char *s) 62 { 63 long t; 64 char *cp; 65 Rune r; 66 int c, n; 67 68 t = time(0); 69 while (*s) { 70 cp = s; 71 do{ 72 n = chartorune(&r, s); 73 if (r == ' ' || r == ',' || r == '\n') 74 break; 75 s += n; 76 } while(*s); 77 c = *s; 78 *s = 0; 79 symlook(strdup(cp), S_TIME, (void *)t)->u.value = t; 80 if (c) 81 *s++ = c; 82 while(*s){ 83 n = chartorune(&r, s); 84 if(r != ' ' && r != ',' && r != '\n') 85 break; 86 s += n; 87 } 88 } 89 } 90