X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Ftouch.c;h=464aedb551401e85ab3b44b0624390abb1ddc50e;hb=322ae93a5e0b78b65831f9fd87fd456eb84d21a1;hp=2076928263da0a540f0a86133c984221726d9a06;hpb=7ab9c7ee52db8759d457819f5480378fa3aa97cc;p=oweals%2Fbusybox.git diff --git a/coreutils/touch.c b/coreutils/touch.c index 207692826..464aedb55 100644 --- a/coreutils/touch.c +++ b/coreutils/touch.c @@ -25,34 +25,18 @@ #include "internal.h" #include #include -#include #include #include #include - -static const char touch_usage[] = "touch [-c] file [file ...]\n" -#ifndef BB_FEATURE_TRIVIAL_HELP - "\nUpdate the last-modified date on the given file[s].\n" -#endif - ; - - - extern int touch_main(int argc, char **argv) { int fd; int create = TRUE; - if (argc < 2) { - usage(touch_usage); - } - argc--; - argv++; - /* Parse options */ - while (**argv == '-') { - while (*++(*argv)) + while (--argc > 0 && **(++argv) == '-') { + while (*(++(*argv))) { switch (**argv) { case 'c': create = FALSE; @@ -61,23 +45,30 @@ extern int touch_main(int argc, char **argv) usage(touch_usage); exit(FALSE); } - argc--; - argv++; + } } - fd = open(*argv, (create == FALSE) ? O_RDWR : O_RDWR | O_CREAT, 0644); - if (fd < 0) { - if (create == FALSE && errno == ENOENT) - exit(TRUE); - else { - perror("touch"); - exit(FALSE); + if (argc < 1) { + usage(touch_usage); + } + + while (argc > 0) { + fd = open(*argv, (create == FALSE) ? O_RDWR : O_RDWR | O_CREAT, + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + if (fd < 0) { + if (create == FALSE && errno == ENOENT) + exit(TRUE); + else { + fatalError("%s", strerror(errno)); + } } + close(fd); + if (utime(*argv, NULL)) { + fatalError("%s", strerror(errno)); + } + argc--; + argv++; } - close(fd); - if (utime(*argv, NULL)) { - perror("touch"); - exit(FALSE); - } else - exit(TRUE); + + return(TRUE); }