From 394cf226682925384f24c6d0814df80f0be82bd0 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Mon, 11 Dec 2000 16:48:50 +0000 Subject: [PATCH] Fix the option parsing to use getopt, which seems to fix bug #1050 --- sysklogd/syslogd.c | 44 +++++++++++++------------------------------- syslogd.c | 44 +++++++++++++------------------------------- 2 files changed, 26 insertions(+), 62 deletions(-) diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c index 9e174e6e8..2d5e52f25 100644 --- a/sysklogd/syslogd.c +++ b/sysklogd/syslogd.c @@ -478,25 +478,19 @@ static void daemon_init (char **argv, char *dz, void fn (void)) extern int syslogd_main(int argc, char **argv) { - int pid, klogd_pid; + int opt, pid, klogd_pid; int doFork = TRUE; #ifdef BB_FEATURE_KLOGD int startKlogd = TRUE; #endif - int stopDoingThat = FALSE; char *p; - char **argv1 = argv; - while (--argc > 0 && **(++argv1) == '-') { - stopDoingThat = FALSE; - while (stopDoingThat == FALSE && *(++(*argv1))) { - switch (**argv1) { + /* do normal option parsing */ + while ((opt = getopt(argc, argv, "m:nKO:R:L")) > 0) { + switch (opt) { case 'm': - if (--argc == 0) { - usage(syslogd_usage); - } - MarkInterval = atoi(*(++argv1)) * 60; + MarkInterval = atoi(optarg) * 60; break; case 'n': doFork = FALSE; @@ -507,38 +501,26 @@ extern int syslogd_main(int argc, char **argv) break; #endif case 'O': - if (--argc == 0) { - usage(syslogd_usage); - } - logFilePath = *(++argv1); - stopDoingThat = TRUE; + logFilePath = strdup(optarg); break; #ifdef BB_FEATURE_REMOTE_LOG case 'R': - if (--argc == 0) { - usage(syslogd_usage); - } - RemoteHost = *(++argv1); - if ( (p = strchr(RemoteHost, ':'))){ - RemotePort = atoi(p+1); - *p = '\0'; - } - doRemoteLog = TRUE; - stopDoingThat = TRUE; - break; + RemoteHost = strdup(optarg); + if ( (p = strchr(RemoteHost, ':'))){ + RemotePort = atoi(p+1); + *p = '\0'; + } + doRemoteLog = TRUE; + break; case 'L': local_logging = TRUE; break; #endif default: usage(syslogd_usage); - } } } - if (argc > 0) - usage(syslogd_usage); - /* Store away localhost's name before the fork */ gethostname(LocalHostName, sizeof(LocalHostName)); if ((p = strchr(LocalHostName, '.'))) { diff --git a/syslogd.c b/syslogd.c index 9e174e6e8..2d5e52f25 100644 --- a/syslogd.c +++ b/syslogd.c @@ -478,25 +478,19 @@ static void daemon_init (char **argv, char *dz, void fn (void)) extern int syslogd_main(int argc, char **argv) { - int pid, klogd_pid; + int opt, pid, klogd_pid; int doFork = TRUE; #ifdef BB_FEATURE_KLOGD int startKlogd = TRUE; #endif - int stopDoingThat = FALSE; char *p; - char **argv1 = argv; - while (--argc > 0 && **(++argv1) == '-') { - stopDoingThat = FALSE; - while (stopDoingThat == FALSE && *(++(*argv1))) { - switch (**argv1) { + /* do normal option parsing */ + while ((opt = getopt(argc, argv, "m:nKO:R:L")) > 0) { + switch (opt) { case 'm': - if (--argc == 0) { - usage(syslogd_usage); - } - MarkInterval = atoi(*(++argv1)) * 60; + MarkInterval = atoi(optarg) * 60; break; case 'n': doFork = FALSE; @@ -507,38 +501,26 @@ extern int syslogd_main(int argc, char **argv) break; #endif case 'O': - if (--argc == 0) { - usage(syslogd_usage); - } - logFilePath = *(++argv1); - stopDoingThat = TRUE; + logFilePath = strdup(optarg); break; #ifdef BB_FEATURE_REMOTE_LOG case 'R': - if (--argc == 0) { - usage(syslogd_usage); - } - RemoteHost = *(++argv1); - if ( (p = strchr(RemoteHost, ':'))){ - RemotePort = atoi(p+1); - *p = '\0'; - } - doRemoteLog = TRUE; - stopDoingThat = TRUE; - break; + RemoteHost = strdup(optarg); + if ( (p = strchr(RemoteHost, ':'))){ + RemotePort = atoi(p+1); + *p = '\0'; + } + doRemoteLog = TRUE; + break; case 'L': local_logging = TRUE; break; #endif default: usage(syslogd_usage); - } } } - if (argc > 0) - usage(syslogd_usage); - /* Store away localhost's name before the fork */ gethostname(LocalHostName, sizeof(LocalHostName)); if ((p = strchr(LocalHostName, '.'))) {