xref: /plan9/sys/src/cmd/mk/file.c (revision 7f49a7ff54b1fd29a638d67350c7ceb952fbe2d6)
17dd7cddfSDavid du Colombier #include	"mk.h"
27dd7cddfSDavid du Colombier 
37dd7cddfSDavid du Colombier /* table-driven version in bootes dump of 12/31/96 */
47dd7cddfSDavid du Colombier 
5*7f49a7ffSDavid du Colombier ulong
mtime(char * name)67dd7cddfSDavid du Colombier mtime(char *name)
77dd7cddfSDavid du Colombier {
8dc5a79c1SDavid du Colombier 	return mkmtime(name, 1);
97dd7cddfSDavid du Colombier }
107dd7cddfSDavid du Colombier 
11*7f49a7ffSDavid du Colombier ulong
timeof(char * name,int force)127dd7cddfSDavid du Colombier timeof(char *name, int force)
137dd7cddfSDavid du Colombier {
147dd7cddfSDavid du Colombier 	Symtab *sym;
15*7f49a7ffSDavid du Colombier 	ulong t;
167dd7cddfSDavid du Colombier 
177dd7cddfSDavid du Colombier 	if(utfrune(name, '('))
187dd7cddfSDavid du Colombier 		return atimeof(force, name);		/* archive */
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier 	if(force)
217dd7cddfSDavid du Colombier 		return mtime(name);
227dd7cddfSDavid du Colombier 
237dd7cddfSDavid du Colombier 	sym = symlook(name, S_TIME, 0);
247dd7cddfSDavid du Colombier 	if (sym)
254de34a7eSDavid du Colombier 		return sym->u.value;		/* uggh */
267dd7cddfSDavid du Colombier 
27dc5a79c1SDavid du Colombier 	t = mkmtime(name, 0);
287dd7cddfSDavid du Colombier 	if(t == 0)
297dd7cddfSDavid du Colombier 		return 0;
307dd7cddfSDavid du Colombier 
317dd7cddfSDavid du Colombier 	symlook(name, S_TIME, (void*)t);		/* install time in cache */
327dd7cddfSDavid du Colombier 	return t;
337dd7cddfSDavid du Colombier }
347dd7cddfSDavid du Colombier 
357dd7cddfSDavid du Colombier void
touch(char * name)367dd7cddfSDavid du Colombier touch(char *name)
377dd7cddfSDavid du Colombier {
387dd7cddfSDavid du Colombier 	Bprint(&bout, "touch(%s)\n", name);
397dd7cddfSDavid du Colombier 	if(nflag)
407dd7cddfSDavid du Colombier 		return;
417dd7cddfSDavid du Colombier 
427dd7cddfSDavid du Colombier 	if(utfrune(name, '('))
437dd7cddfSDavid du Colombier 		atouch(name);		/* archive */
447dd7cddfSDavid du Colombier 	else if(chgtime(name) < 0) {
457dd7cddfSDavid du Colombier 		perror(name);
467dd7cddfSDavid du Colombier 		Exit();
477dd7cddfSDavid du Colombier 	}
487dd7cddfSDavid du Colombier }
497dd7cddfSDavid du Colombier 
507dd7cddfSDavid du Colombier void
delete(char * name)517dd7cddfSDavid du Colombier delete(char *name)
527dd7cddfSDavid du Colombier {
537dd7cddfSDavid du Colombier 	if(utfrune(name, '(') == 0) {		/* file */
547dd7cddfSDavid du Colombier 		if(remove(name) < 0)
557dd7cddfSDavid du Colombier 			perror(name);
567dd7cddfSDavid du Colombier 	} else
577dd7cddfSDavid du Colombier 		fprint(2, "hoon off; mk can'tdelete archive members\n");
587dd7cddfSDavid du Colombier }
597dd7cddfSDavid du Colombier 
607dd7cddfSDavid du Colombier void
timeinit(char * s)617dd7cddfSDavid du Colombier timeinit(char *s)
627dd7cddfSDavid du Colombier {
63*7f49a7ffSDavid du Colombier 	ulong t;
647dd7cddfSDavid du Colombier 	char *cp;
657dd7cddfSDavid du Colombier 	Rune r;
667dd7cddfSDavid du Colombier 	int c, n;
677dd7cddfSDavid du Colombier 
687dd7cddfSDavid du Colombier 	t = time(0);
697dd7cddfSDavid du Colombier 	while (*s) {
707dd7cddfSDavid du Colombier 		cp = s;
717dd7cddfSDavid du Colombier 		do{
727dd7cddfSDavid du Colombier 			n = chartorune(&r, s);
737dd7cddfSDavid du Colombier 			if (r == ' ' || r == ',' || r == '\n')
747dd7cddfSDavid du Colombier 				break;
757dd7cddfSDavid du Colombier 			s += n;
767dd7cddfSDavid du Colombier 		} while(*s);
777dd7cddfSDavid du Colombier 		c = *s;
787dd7cddfSDavid du Colombier 		*s = 0;
794de34a7eSDavid du Colombier 		symlook(strdup(cp), S_TIME, (void *)t)->u.value = t;
807dd7cddfSDavid du Colombier 		if (c)
817dd7cddfSDavid du Colombier 			*s++ = c;
827dd7cddfSDavid du Colombier 		while(*s){
837dd7cddfSDavid du Colombier 			n = chartorune(&r, s);
847dd7cddfSDavid du Colombier 			if(r != ' ' && r != ',' && r != '\n')
857dd7cddfSDavid du Colombier 				break;
867dd7cddfSDavid du Colombier 			s += n;
877dd7cddfSDavid du Colombier 		}
887dd7cddfSDavid du Colombier 	}
897dd7cddfSDavid du Colombier }
90