1 bc7cb1a1 2003-11-23 devnull #include <u.h>
2 bc7cb1a1 2003-11-23 devnull #include <libc.h>
4 bc7cb1a1 2003-11-23 devnull int touch(int, char *);
5 bc7cb1a1 2003-11-23 devnull ulong now;
6 b7cb7453 2007-05-20 devnull int tflag;
9 bc7cb1a1 2003-11-23 devnull usage(void)
11 bc7cb1a1 2003-11-23 devnull fprint(2, "usage: touch [-c] [-t time] files\n");
12 bc7cb1a1 2003-11-23 devnull exits("usage");
16 bc7cb1a1 2003-11-23 devnull main(int argc, char **argv)
18 bc7cb1a1 2003-11-23 devnull int nocreate = 0;
19 bc7cb1a1 2003-11-23 devnull int status = 0;
21 bc7cb1a1 2003-11-23 devnull now = time(0);
22 bc7cb1a1 2003-11-23 devnull ARGBEGIN{
23 bc7cb1a1 2003-11-23 devnull case 't':
24 b7cb7453 2007-05-20 devnull tflag = 1;
25 bc7cb1a1 2003-11-23 devnull now = strtoul(EARGF(usage()), 0, 0);
27 bc7cb1a1 2003-11-23 devnull case 'c':
28 bc7cb1a1 2003-11-23 devnull nocreate = 1;
34 bc7cb1a1 2003-11-23 devnull if(!*argv)
36 bc7cb1a1 2003-11-23 devnull while(*argv)
37 bc7cb1a1 2003-11-23 devnull status += touch(nocreate, *argv++);
38 bc7cb1a1 2003-11-23 devnull if(status)
39 bc7cb1a1 2003-11-23 devnull exits("touch");
40 bc7cb1a1 2003-11-23 devnull exits(0);
44 bc7cb1a1 2003-11-23 devnull touch(int nocreate, char *name)
46 bc7cb1a1 2003-11-23 devnull Dir stbuff;
49 bc7cb1a1 2003-11-23 devnull nulldir(&stbuff);
50 bc7cb1a1 2003-11-23 devnull stbuff.mtime = now;
51 bc7cb1a1 2003-11-23 devnull if(dirwstat(name, &stbuff) >= 0)
52 bc7cb1a1 2003-11-23 devnull return 0;
53 bc7cb1a1 2003-11-23 devnull if(nocreate){
54 bc7cb1a1 2003-11-23 devnull fprint(2, "touch: %s: cannot wstat: %r\n", name);
55 bc7cb1a1 2003-11-23 devnull return 1;
57 b7cb7453 2007-05-20 devnull if((fd = create(name, OREAD, 0666)) < 0) {
58 bc7cb1a1 2003-11-23 devnull fprint(2, "touch: %s: cannot create: %r\n", name);
59 bc7cb1a1 2003-11-23 devnull return 1;
61 b7cb7453 2007-05-20 devnull if(tflag && dirfwstat(fd, &stbuff) < 0){
62 b7cb7453 2007-05-20 devnull fprint(2, "touch: %s: cannot wstat: %r\n", name);
63 b7cb7453 2007-05-20 devnull close(fd);
64 b7cb7453 2007-05-20 devnull return 1;
66 bc7cb1a1 2003-11-23 devnull close(fd);
67 bc7cb1a1 2003-11-23 devnull return 0;