Remove `== TRUE' tests and convert `!= TRUE' and `== FALSE' tests to use !.
[oweals/busybox.git] / coreutils / touch.c
index d882a63193192357bab41a67d7671cd374eb3090..f1c6dc4849fd8780a45e3cd70111bea2a6b41444 100644 (file)
@@ -1,7 +1,9 @@
+/* vi: set sw=4 ts=4: */
 /*
  * Mini touch implementation for busybox
  *
- * Copyright (C) 1998 by Erik Andersen <andersee@debian.org>
+ * Copyright (C) 1999,2000 by Lineo, inc. and Erik Andersen
+ * Copyright (C) 1999,2000,2001 by Erik Andersen <andersee@debian.org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  *
  */
 
-#include "internal.h"
 #include <stdio.h>
 #include <sys/types.h>
-#include <sys/stat.h>
 #include <fcntl.h>
 #include <utime.h>
 #include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include "busybox.h"
 
-
-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 ? O_RDWR | O_CREAT : O_RDWR,
+                               S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
+               if (fd < 0) {
+                       if (! create && errno == ENOENT) {
+                               argc--;
+                               argv++;
+                               continue;
+                       } else {
+                               perror_msg_and_die("%s", *argv);
+                       }
+               }
+               close(fd);
+               if (utime(*argv, NULL)) {
+                       perror_msg_and_die("%s", *argv);
+               }
+               argc--;
+               argv++;
+       }
 
+       return EXIT_SUCCESS;
+}