Fix touch so it behaves itself (it could segfault in some cases).

Fix uname help info formatting.
 -Erik
This commit is contained in:
Eric Andersen 2000-06-02 23:26:44 +00:00
parent 808d03ec19
commit 5a0a2aa00b
4 changed files with 58 additions and 54 deletions

View File

@ -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);
}
}
}
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++;
}
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);
}
}
close(fd);
if (utime(*argv, NULL)) {
perror("touch");
exit(FALSE);
} else
exit(TRUE);
exit(TRUE);
}

View File

@ -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"

52
touch.c
View File

@ -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);
}
}
}
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++;
}
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);
}
}
close(fd);
if (utime(*argv, NULL)) {
perror("touch");
exit(FALSE);
} else
exit(TRUE);
exit(TRUE);
}

View File

@ -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"