Log stdin when no message given and use getopt.

This commit is contained in:
Matt Kraai 2001-01-02 18:13:58 +00:00
parent 28b3c53f0d
commit 1944f547bd
4 changed files with 36 additions and 78 deletions

View File

@ -586,7 +586,7 @@ const char loadkmap_usage[] =
const char logger_usage[] = const char logger_usage[] =
"logger [OPTION]... [MESSAGE]\n" "logger [OPTION]... [MESSAGE]\n"
#ifndef BB_FEATURE_TRIVIAL_HELP #ifndef BB_FEATURE_TRIVIAL_HELP
"\nWrite MESSAGE to the system log. If MESSAGE is '-', log stdin.\n\n" "\nWrite MESSAGE to the system log. If MESSAGE is omitted, log stdin.\n\n"
"Options:\n" "Options:\n"
"\t-s\tLog to stderr as well as the system log.\n" "\t-s\tLog to stderr as well as the system log.\n"
"\t-t\tLog using the specified tag (defaults to user name).\n" "\t-t\tLog using the specified tag (defaults to user name).\n"

View File

@ -101,68 +101,47 @@ extern int logger_main(int argc, char **argv)
{ {
int pri = LOG_USER | LOG_NOTICE; int pri = LOG_USER | LOG_NOTICE;
int option = 0; int option = 0;
int fromStdinFlag = FALSE; int c, i, len, opt;
int stopLookingAtMeLikeThat = FALSE;
char *message=NULL, buf[1024], name[128]; char *message=NULL, buf[1024], name[128];
/* Fill out the name string early (may be overwritten later */ /* Fill out the name string early (may be overwritten later) */
my_getpwuid(name, geteuid()); my_getpwuid(name, geteuid());
/* Parse any options */ /* Parse any options */
while (--argc > 0 && **(++argv) == '-') { while ((opt = getopt(argc, argv, "p:st:")) > 0) {
if (*((*argv) + 1) == '\0') { switch (opt) {
fromStdinFlag = TRUE;
}
stopLookingAtMeLikeThat = FALSE;
while (*(++(*argv)) && stopLookingAtMeLikeThat == FALSE) {
switch (**argv) {
case 's': case 's':
option |= LOG_PERROR; option |= LOG_PERROR;
break; break;
case 'p': case 'p':
if (--argc == 0) { pri = pencode(optarg);
usage(logger_usage);
}
pri = pencode(*(++argv));
stopLookingAtMeLikeThat = TRUE;
break; break;
case 't': case 't':
if (--argc == 0) { strncpy(name, optarg, sizeof(name));
usage(logger_usage);
}
strncpy(name, *(++argv), sizeof(name));
stopLookingAtMeLikeThat = TRUE;
break; break;
default: default:
usage(logger_usage); usage(logger_usage);
}
} }
} }
if (fromStdinFlag == TRUE) { if (optind == argc) {
/* read from stdin */ /* read from stdin */
int c; i = 0;
unsigned int i = 0;
while ((c = getc(stdin)) != EOF && i < sizeof(buf)) { while ((c = getc(stdin)) != EOF && i < sizeof(buf)) {
buf[i++] = c; buf[i++] = c;
} }
message = buf; message = buf;
} else { } else {
if (argc >= 1) { len = 1; /* for the '\0' */
int len = 1; /* for the '\0' */ message=xcalloc(1, 1);
message=xcalloc(1, 1); for (i = optind; i < argc; i++) {
for (; *argv != NULL; argv++) { len += strlen(argv[i]);
len += strlen(*argv); len += 1; /* for the space between the args */
len += 1; /* for the space between the args */ message = xrealloc(message, len);
message = xrealloc(message, len); strcat(message, argv[i]);
strcat(message, *argv); strcat(message, " ");
strcat(message, " ");
}
message[strlen(message)-1] = '\0';
} else {
error_msg_and_die("No message\n");
} }
message[strlen(message)-1] = '\0';
} }
openlog(name, option, (pri | LOG_FACMASK)); openlog(name, option, (pri | LOG_FACMASK));

View File

@ -101,68 +101,47 @@ extern int logger_main(int argc, char **argv)
{ {
int pri = LOG_USER | LOG_NOTICE; int pri = LOG_USER | LOG_NOTICE;
int option = 0; int option = 0;
int fromStdinFlag = FALSE; int c, i, len, opt;
int stopLookingAtMeLikeThat = FALSE;
char *message=NULL, buf[1024], name[128]; char *message=NULL, buf[1024], name[128];
/* Fill out the name string early (may be overwritten later */ /* Fill out the name string early (may be overwritten later) */
my_getpwuid(name, geteuid()); my_getpwuid(name, geteuid());
/* Parse any options */ /* Parse any options */
while (--argc > 0 && **(++argv) == '-') { while ((opt = getopt(argc, argv, "p:st:")) > 0) {
if (*((*argv) + 1) == '\0') { switch (opt) {
fromStdinFlag = TRUE;
}
stopLookingAtMeLikeThat = FALSE;
while (*(++(*argv)) && stopLookingAtMeLikeThat == FALSE) {
switch (**argv) {
case 's': case 's':
option |= LOG_PERROR; option |= LOG_PERROR;
break; break;
case 'p': case 'p':
if (--argc == 0) { pri = pencode(optarg);
usage(logger_usage);
}
pri = pencode(*(++argv));
stopLookingAtMeLikeThat = TRUE;
break; break;
case 't': case 't':
if (--argc == 0) { strncpy(name, optarg, sizeof(name));
usage(logger_usage);
}
strncpy(name, *(++argv), sizeof(name));
stopLookingAtMeLikeThat = TRUE;
break; break;
default: default:
usage(logger_usage); usage(logger_usage);
}
} }
} }
if (fromStdinFlag == TRUE) { if (optind == argc) {
/* read from stdin */ /* read from stdin */
int c; i = 0;
unsigned int i = 0;
while ((c = getc(stdin)) != EOF && i < sizeof(buf)) { while ((c = getc(stdin)) != EOF && i < sizeof(buf)) {
buf[i++] = c; buf[i++] = c;
} }
message = buf; message = buf;
} else { } else {
if (argc >= 1) { len = 1; /* for the '\0' */
int len = 1; /* for the '\0' */ message=xcalloc(1, 1);
message=xcalloc(1, 1); for (i = optind; i < argc; i++) {
for (; *argv != NULL; argv++) { len += strlen(argv[i]);
len += strlen(*argv); len += 1; /* for the space between the args */
len += 1; /* for the space between the args */ message = xrealloc(message, len);
message = xrealloc(message, len); strcat(message, argv[i]);
strcat(message, *argv); strcat(message, " ");
strcat(message, " ");
}
message[strlen(message)-1] = '\0';
} else {
error_msg_and_die("No message\n");
} }
message[strlen(message)-1] = '\0';
} }
openlog(name, option, (pri | LOG_FACMASK)); openlog(name, option, (pri | LOG_FACMASK));

View File

@ -586,7 +586,7 @@ const char loadkmap_usage[] =
const char logger_usage[] = const char logger_usage[] =
"logger [OPTION]... [MESSAGE]\n" "logger [OPTION]... [MESSAGE]\n"
#ifndef BB_FEATURE_TRIVIAL_HELP #ifndef BB_FEATURE_TRIVIAL_HELP
"\nWrite MESSAGE to the system log. If MESSAGE is '-', log stdin.\n\n" "\nWrite MESSAGE to the system log. If MESSAGE is omitted, log stdin.\n\n"
"Options:\n" "Options:\n"
"\t-s\tLog to stderr as well as the system log.\n" "\t-s\tLog to stderr as well as the system log.\n"
"\t-t\tLog using the specified tag (defaults to user name).\n" "\t-t\tLog using the specified tag (defaults to user name).\n"