diff --git a/kill.1 b/kill.1 index 983bffd..237ecfb 100644 --- a/kill.1 +++ b/kill.1 @@ -25,4 +25,5 @@ lists available signals. If a .I signum is given, only the corresponding signal name will be printed. .SH SEE ALSO -.IR kill (2) +.IR kill (2), +.IR signal (7) diff --git a/touch.c b/touch.c index 5988989..d336695 100644 --- a/touch.c +++ b/touch.c @@ -43,17 +43,20 @@ touch(const char *str) struct stat st; struct utimbuf ut; - if(stat(str, &st) == -1) { - if(errno != ENOENT) - eprintf("stat %s:", str); - if(cflag) - return; - if((fd = creat(str, O_EXCL|S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) < 0) - eprintf("creat %s:", str); - close(fd); + if(stat(str, &st) == 0) { + ut.actime = st.st_atime; + ut.modtime = t; + if(utime(str, &ut) == -1) + eprintf("utime %s:", str); + return; } - ut.actime = st.st_atime; - ut.modtime = t; - if(utime(str, &ut) == -1) - eprintf("utime %s:", str); + else if(errno != ENOENT) + eprintf("stat %s:", str); + else if(cflag) + return; + if((fd = open(str, O_CREAT|O_EXCL, + S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)) == -1) + eprintf("open %s:", str); + close(fd); + touch(str); }