int logger_main(int argc UNUSED_PARAM, char **argv) { char *str_p, *str_t; int opt; int i = 0; FILE *f = NULL; /* Fill out the name string early (may be overwritten later) */ str_t = uid2uname_utoa(geteuid()); /* Parse any options */ opt = getopt32(argv, "p:st:c", &str_p, &str_t); if (opt & 0x2) /* -s */ i |= LOG_PERROR; if (opt & 0x8) { /* -c */ f = fopen_for_write(DEV_CONSOLE); if (!f) bb_error_msg("can't open console: %d %s\n", errno, strerror(errno)); } //if (opt & 0x4) /* -t */ openlog(str_t, i, 0); i = LOG_USER | LOG_WARNING; if (opt & 0x1) /* -p */ i = pencode(str_p); argv += optind; if (!argv[0]) { while (fgets(strbuf, COMMON_BUFSIZE, stdin)) { if (strbuf[0] && NOT_LONE_CHAR(strbuf, '\n') ) { /* Neither "" nor "\n" */ syslog(i, "%s", strbuf); if (f) fprintf(f, "%s", strbuf); } } } else { char *message = NULL; int len = 0; int pos = 0; do { len += strlen(*argv) + 1; message = xrealloc(message, len + 1); sprintf(message + pos, " %s", *argv), pos = len; } while (*++argv); syslog(i, "%s", message + 1); /* skip leading " " */ if (f) fprintf(f, "%s", message + 1); } closelog(); if (f) fclose(f); return EXIT_SUCCESS; }
int logger_main(int argc UNUSED_PARAM, char **argv) { char *str_p, *str_t; int opt; int i = 0; int fd = -1; setup_common_bufsiz(); /* Fill out the name string early (may be overwritten later) */ str_t = uid2uname_utoa(geteuid()); /* Parse any options */ opt = getopt32(argv, "p:st:c", &str_p, &str_t); if (opt & 0x2) /* -s */ i |= LOG_PERROR; //if (opt & 0x4) /* -t */ openlog(str_t, i, 0); if (opt & 0x8) { /* -c */ fd = device_open(DEV_CONSOLE, O_WRONLY | O_NOCTTY | O_NONBLOCK); if (fd < 0) bb_error_msg("can't open console"); } i = LOG_USER | LOG_WARNING; if (opt & 0x1) /* -p */ i = pencode(str_p); argv += optind; if (!argv[0]) { while (fgets(strbuf, COMMON_BUFSIZE, stdin)) { if (strbuf[0] && NOT_LONE_CHAR(strbuf, '\n') ) { /* Neither "" nor "\n" */ syslog(i, "%s", strbuf); if (fd >= 0) { fdprintf(fd, "%s: %s%s", str_t, strbuf, strchr(strbuf, '\n') ? "" : "\n"); } } } } else { char *message = NULL; int len = 0; int pos = 0; do { len += strlen(*argv) + 1; message = xrealloc(message, len + 1); sprintf(message + pos, " %s", *argv), pos = len; } while (*++argv); syslog(i, "%s", message + 1); /* skip leading " " */ if (fd >= 0 && len) { fdprintf(fd, "%s:%s%s", str_t, message, message[len - 1] == '\n' ? "" : "\n"); } } closelog(); if (fd >= 0) close(fd); return EXIT_SUCCESS; }