Date: Sun, 09 Feb 2003 09:36:00 -0700 (MST) From: "M. Warner Losh" <imp@bsdimp.com> To: bright@mu.org Cc: current@FreeBSD.ORG Subject: Re: syslog bug Message-ID: <20030209.093600.122405559.imp@bsdimp.com> In-Reply-To: <20030208210824.GK88781@elvis.mu.org> References: <20030208210824.GK88781@elvis.mu.org>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20030208210824.GK88781@elvis.mu.org>
Alfred Perlstein <bright@mu.org> writes:
: syslog(3) botches things if you pass it a string that has "%%m" in it.
: this should fix it, any comments?
:
: Index: syslog.c
: ===================================================================
: RCS file: /home/ncvs/src/lib/libc/gen/syslog.c,v
: retrieving revision 1.28
: diff -u -r1.28 syslog.c
: --- syslog.c 14 Nov 2002 12:40:14 -0000 1.28
: +++ syslog.c 8 Feb 2003 21:08:09 -0000
: @@ -190,12 +190,18 @@
: }
:
: /* Substitute error message for %m. */
: - for ( ; (ch = *fmt); ++fmt)
: + for ( ; (ch = *fmt); ++fmt) {
: if (ch == '%' && fmt[1] == 'm') {
: ++fmt;
: fputs(strerror(saved_errno), fmt_fp);
: - } else
: + } else if (ch == '%' && fmt[1] == '%') {
: + ++fmt;
: + fputc(ch, fmt_fp);
: + fputc(ch, fmt_fp);
: + } else {
: fputc(ch, fmt_fp);
: + }
: + }
:
: /* Null terminate if room */
: fputc(0, fmt_fp);
:
With the above fix, "fred %%m" will produce
'fred %%ERRNO-ERROR-MESSAGE' would it not? Isn't there one too many
fputc(ch, fmt_fp) in the case where you detect %%?
+ ++fmt;
+ fputc(ch, fmt_fp);
instead in the '%%' if statement. This would print only one '%' ala
printf.
Warner
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030209.093600.122405559.imp>
