X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=touch.c;h=a3256d55970dc4fc746a2b1d29e22ac0d3ba620e;hb=f1bbb22dca4d39aa227246f4c2ee90acd7e512a4;hp=f8972dcf6912ccdb42e07164716a92fef94b0e1e;hpb=61677feff7f549a48267c2c0c50a7420de6e2599;p=oweals%2Fbusybox.git diff --git a/touch.c b/touch.c index f8972dcf6..a3256d559 100644 --- a/touch.c +++ b/touch.c @@ -3,7 +3,7 @@ * Mini touch implementation for busybox * * - * Copyright (C) 1999,2000 by Lineo, inc. + * Copyright (C) 1999,2000,2001 by Lineo, inc. * Written by Erik Andersen , * * This program is free software; you can redistribute it and/or modify @@ -22,60 +22,54 @@ * */ -#include "internal.h" +#include "busybox.h" #include #include -#include #include #include #include - - -static const char touch_usage[] = "touch [-c] file [file ...]\n\n" - - "Update the last-modified date on the given file[s].\n"; - - +#include +#include 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; break; default: - usage(touch_usage); - exit(FALSE); + show_usage(); } - argc--; - argv++; + } + } + + if (argc < 1) { + show_usage(); } - 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); + 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) + return EXIT_SUCCESS; + else { + perror_msg_and_die("%s", *argv); + } } + close(fd); + if (utime(*argv, NULL)) { + perror_msg_and_die("%s", *argv); + } + argc--; + argv++; } - close(fd); - if (utime(*argv, NULL)) { - perror("touch"); - exit(FALSE); - } else - exit(TRUE); + + return EXIT_SUCCESS; }