xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/utime.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1*219b2ee8SDavid du Colombier #include "lib.h"
23e12c5d1SDavid du Colombier #include <sys/types.h>
3*219b2ee8SDavid du Colombier #include <time.h>
43e12c5d1SDavid du Colombier #include <utime.h>
53e12c5d1SDavid du Colombier #include <errno.h>
63e12c5d1SDavid du Colombier #include "sys9.h"
7*219b2ee8SDavid du Colombier #include "dir.h"
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier int
103e12c5d1SDavid du Colombier utime(const char *path, const struct utimbuf *times)
113e12c5d1SDavid du Colombier {
12*219b2ee8SDavid du Colombier 	int n;
13*219b2ee8SDavid du Colombier 	char cd[DIRLEN];
14*219b2ee8SDavid du Colombier 	Dir dir;
15*219b2ee8SDavid du Colombier 	time_t curt;
16*219b2ee8SDavid du Colombier 
17*219b2ee8SDavid du Colombier 	if(_STAT(path, cd) < 0){
18*219b2ee8SDavid du Colombier 		_syserrno();
193e12c5d1SDavid du Colombier 		return -1;
203e12c5d1SDavid du Colombier 	}
21*219b2ee8SDavid du Colombier 	convM2D(cd, &dir);
22*219b2ee8SDavid du Colombier 	if(times == 0) {
23*219b2ee8SDavid du Colombier 		curt = time(0);
24*219b2ee8SDavid du Colombier 		dir.atime = curt;
25*219b2ee8SDavid du Colombier 		dir.mtime = curt;
26*219b2ee8SDavid du Colombier 	} else {
27*219b2ee8SDavid du Colombier 		dir.atime = times->actime;
28*219b2ee8SDavid du Colombier 		dir.mtime = times->modtime;
29*219b2ee8SDavid du Colombier 	}
30*219b2ee8SDavid du Colombier 	convD2M(&dir, cd);
31*219b2ee8SDavid du Colombier 	n = _WSTAT(path, cd);
32*219b2ee8SDavid du Colombier 	if(n < 0)
33*219b2ee8SDavid du Colombier 		_syserrno();
34*219b2ee8SDavid du Colombier 	return n;
35*219b2ee8SDavid du Colombier }
36