| #include "mk.h" |
| |
| /* table-driven version in bootes dump of 12/31/96 */ |
| |
| long |
| mtime(char *name) |
| { |
| return mkmtime(name); |
| } |
| |
| long |
| timeof(char *name, int force) |
| { |
| Symtab *sym; |
| long t; |
| |
| if(utfrune(name, '(')) |
| return atimeof(force, name); /* archive */ |
| |
| if(force) |
| return mtime(name); |
| |
| |
| sym = symlook(name, S_TIME, 0); |
| if (sym) |
| return sym->u.value; |
| |
| t = mtime(name); |
| if(t == 0) |
| return 0; |
| |
| symlook(name, S_TIME, (void*)t); /* install time in cache */ |
| return t; |
| } |
| |
| void |
| touch(char *name) |
| { |
| Bprint(&bout, "touch(%s)\n", name); |
| if(nflag) |
| return; |
| |
| if(utfrune(name, '(')) |
| atouch(name); /* archive */ |
| else if(chgtime(name) < 0) { |
| fprint(2, "%s: %r\n", name); |
| Exit(); |
| } |
| } |
| |
| void |
| delete(char *name) |
| { |
| if(utfrune(name, '(') == 0) { /* file */ |
| if(remove(name) < 0) |
| fprint(2, "remove %s: %r\n", name); |
| } else |
| fprint(2, "hoon off; mk can'tdelete archive members\n"); |
| } |
| |
| void |
| timeinit(char *s) |
| { |
| long t; |
| char *cp; |
| Rune r; |
| int c, n; |
| |
| t = time(0); |
| while (*s) { |
| cp = s; |
| do{ |
| n = chartorune(&r, s); |
| if (r == ' ' || r == ',' || r == '\n') |
| break; |
| s += n; |
| } while(*s); |
| c = *s; |
| *s = 0; |
| symlook(strdup(cp), S_TIME, (void *)t)->u.value = t; |
| if (c) |
| *s++ = c; |
| while(*s){ |
| n = chartorune(&r, s); |
| if(r != ' ' && r != ',' && r != '\n') |
| break; |
| s += n; |
| } |
| } |
| } |