work in progress...
[oweals/busybox.git] / logger.c
index 0683838ccf5cf66945ed8c8d65b53f431094bc76..5ef622dc31e593a0f09492d1b3c4d48190e92d54 100644 (file)
--- a/logger.c
+++ b/logger.c
@@ -118,14 +118,20 @@ extern int logger_main(int argc, char **argv)
 {
     struct sockaddr_un sunx;
     int fd, pri = LOG_USER|LOG_NOTICE;
+    int fromStdinFlag=FALSE;
     int toStdErrFlag=FALSE;
-    char *message, buf[1024];
+    int stopLookingAtMeLikeThat=FALSE;
+    char *message, buf[1024], buf1[1024];
     time_t  now;
     size_t addrLength;
 
     /* Parse any options */
     while (--argc > 0 && **(++argv) == '-') {
-       while (*(++(*argv))) {
+       if (*((*argv)+1) == '\0') {
+           fromStdinFlag=TRUE;
+       }
+       stopLookingAtMeLikeThat=FALSE;
+       while (*(++(*argv)) && stopLookingAtMeLikeThat==FALSE) {
            switch (**argv) {
            case 's':
                toStdErrFlag = TRUE;
@@ -135,10 +141,7 @@ extern int logger_main(int argc, char **argv)
                    usage(logger_usage);
                }
                pri = pencode(*(++argv));
-               if (--argc == 0) {
-                   usage(logger_usage);
-               }
-               ++argv;
+               stopLookingAtMeLikeThat=TRUE;
                break;
            default:
                usage(logger_usage);
@@ -146,15 +149,21 @@ extern int logger_main(int argc, char **argv)
        }
     }
 
-    if (argc>=1)
-       if (**argv=='-') {
-           /* read from stdin */
+    if (fromStdinFlag==TRUE) {
+       /* read from stdin */
+       int i=0;
+       char c;
+       while ((c = getc(stdin)) != EOF && i<sizeof(buf1)) {
+           buf1[i++]=c;
+       }
+       message=buf1;
+    } else {
+       if (argc>=1) {
+               message=*argv;
        } else {
-           message=*argv;
+           fprintf(stderr, "No message\n");
+           exit( FALSE);
        }
-    else {
-       fprintf(stderr, "No message\n");
-       exit( FALSE);
     }
 
     memset(&sunx, 0, sizeof(sunx));