X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=klibc%2Fklibc%2Fsyslog.c;h=0cd296ab8580753e89e19c8e754c178f3cfad70a;hb=670e470543e02937979e1c879d97f474d5b6fbd1;hp=592992ba6b2a82e710307c8f298cdebada689db0;hpb=a0622777688ad84ef3d789e0171cfb0ca3dc21d2;p=elogind.git diff --git a/klibc/klibc/syslog.c b/klibc/klibc/syslog.c index 592992ba6..0cd296ab8 100644 --- a/klibc/klibc/syslog.c +++ b/klibc/klibc/syslog.c @@ -18,10 +18,11 @@ #define LOGDEV "/dev/kmsg" /* Max length of ID string */ -#define MAXID 31 /* MAXID+6 must be < BUFLEN */ +#define MAXID 31 /* MAXID+5 must be < BUFLEN */ int __syslog_fd = -1; static char id[MAXID+1]; +static int syslog_flags = 0; void openlog(const char *ident, int option, int facility) { @@ -36,8 +37,9 @@ void openlog(const char *ident, int option, int facility) fcntl(fd, F_SETFD, (long)FD_CLOEXEC); } + syslog_flags = option; + strncpy(id, ident?ident:"", MAXID); - id[MAXID] = '\0'; /* Make sure it's null-terminated */ } void vsyslog(int prio, const char *format, va_list ap) @@ -54,19 +56,25 @@ void vsyslog(int prio, const char *format, va_list ap) buf[2] = '>'; len = 3; - if ( *id ) + if ( syslog_flags & LOG_PID ) + len += sprintf(buf+3, "%s[%u]: ", id, getpid()); + else if ( *id ) len += sprintf(buf+3, "%s: ", id); len += vsnprintf(buf+len, BUFLEN-len, format, ap); if ( len > BUFLEN-1 ) len = BUFLEN-1; - buf[len++] = '\n'; + if (buf[len-1] != '\n') + buf[len++] = '\n'; fd = __syslog_fd; if ( fd == -1 ) fd = 2; /* Failed to open log, write to stderr */ write(fd, buf, len); + + if ( syslog_flags & LOG_PERROR ) + _fwrite(buf+3, len-3, stderr); } void syslog(int prio, const char *format, ...)