diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-06-02 23:26:44 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-06-02 23:26:44 +0000 |
commit | 5a0a2aa00be4a19dd52b65b70c7cc6d944a5aef6 (patch) | |
tree | c2256921b9067191a1a556d1e3244b4105fb9e27 | |
parent | 808d03ec19e0c8f0c06d9a9defb85fc9a1100441 (diff) | |
download | busybox-5a0a2aa00be4a19dd52b65b70c7cc6d944a5aef6.tar.gz |
Fix touch so it behaves itself (it could segfault in some cases).
Fix uname help info formatting.
-Erik
-rw-r--r-- | coreutils/touch.c | 52 | ||||
-rw-r--r-- | coreutils/uname.c | 4 | ||||
-rw-r--r-- | touch.c | 52 | ||||
-rw-r--r-- | uname.c | 4 |
4 files changed, 58 insertions, 54 deletions
diff --git a/coreutils/touch.c b/coreutils/touch.c index 207692826..1364bb7d5 100644 --- a/coreutils/touch.c +++ b/coreutils/touch.c @@ -33,26 +33,21 @@ 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" + "\nUpdate the last-modified date on the given file[s].\n\n" + "Options:\n" + "\t-c\tDo not create any files\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 +56,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("touch: %s", strerror(errno)); + } + } + close(fd); + if (utime(*argv, NULL)) { + fatalError("touch: %s", strerror(errno)); } + argc--; + argv++; } - close(fd); - if (utime(*argv, NULL)) { - perror("touch"); - exit(FALSE); - } else - exit(TRUE); + + exit(TRUE); } diff --git a/coreutils/uname.c b/coreutils/uname.c index f1304925d..981ac69ed 100644 --- a/coreutils/uname.c +++ b/coreutils/uname.c @@ -42,9 +42,9 @@ static const char uname_usage[] = - "uname [OPTION]...\n\n" + "uname [OPTION]...\n" #ifndef BB_FEATURE_TRIVIAL_HELP - "Print certain system information. With no OPTION, same as -s.\n\n" + "\nPrint certain system information. With no OPTION, same as -s.\n\n" "Options:\n" "\t-a\tprint all information\n" "\t-m\tthe machine (hardware) type\n" @@ -33,26 +33,21 @@ 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" + "\nUpdate the last-modified date on the given file[s].\n\n" + "Options:\n" + "\t-c\tDo not create any files\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 +56,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("touch: %s", strerror(errno)); + } + } + close(fd); + if (utime(*argv, NULL)) { + fatalError("touch: %s", strerror(errno)); } + argc--; + argv++; } - close(fd); - if (utime(*argv, NULL)) { - perror("touch"); - exit(FALSE); - } else - exit(TRUE); + + exit(TRUE); } @@ -42,9 +42,9 @@ static const char uname_usage[] = - "uname [OPTION]...\n\n" + "uname [OPTION]...\n" #ifndef BB_FEATURE_TRIVIAL_HELP - "Print certain system information. With no OPTION, same as -s.\n\n" + "\nPrint certain system information. With no OPTION, same as -s.\n\n" "Options:\n" "\t-a\tprint all information\n" "\t-m\tthe machine (hardware) type\n" |