X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=touch.c;h=a3256d55970dc4fc746a2b1d29e22ac0d3ba620e;hb=f1bbb22dca4d39aa227246f4c2ee90acd7e512a4;hp=b98a2e4c84edbe90b08ff35bdfde163d5c7c1fc5;hpb=c49960189a04b73e033016bd0f43fbb950f800e1;p=oweals%2Fbusybox.git diff --git a/touch.c b/touch.c index b98a2e4c8..a3256d559 100644 --- a/touch.c +++ b/touch.c @@ -1,8 +1,9 @@ +/* vi: set sw=4 ts=4: */ /* * Mini touch implementation for busybox * * - * Copyright (C) 1999 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 @@ -21,66 +22,54 @@ * */ -#include "internal.h" +#include "busybox.h" #include #include -#include #include #include #include +#include +#include - -static const char touch_usage[] = "touch [-c] file [file ...]\n\n" -"\tUpdate the last-modified date on the given file[s].\n"; - - - -extern int -touch_main(int argc, char **argv) +extern int touch_main(int argc, char **argv) { - int fd; - int create=TRUE; - - if (argc < 2) { - usage( touch_usage); - } - argc--; - argv++; + int fd; + int create = TRUE; - /* Parse options */ - while (**argv == '-') { - while (*++(*argv)) switch (**argv) { - case 'c': - create = FALSE; - break; - default: - fprintf(stderr, "Unknown option: %c\n", **argv); - exit( FALSE); + /* Parse options */ + while (--argc > 0 && **(++argv) == '-') { + while (*(++(*argv))) { + switch (**argv) { + case 'c': + create = FALSE; + break; + default: + show_usage(); + } + } } - 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) { + show_usage(); } - } - close( fd); - if (utime (*argv, NULL)) { - perror("touch"); - exit( FALSE); - } - else - exit( TRUE); -} - - - - + 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++; + } + return EXIT_SUCCESS; +}