From: Joseph Myers Date: Wed, 17 Jun 2015 20:10:50 +0000 (+0000) Subject: Fix syslog dprintf namespace (bug 18534). X-Git-Tag: glibc-2.22~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be7dc2b77e368daad6f81e272fc41f1b86166240;p=thirdparty%2Fglibc.git Fix syslog dprintf namespace (bug 18534). syslog functions bring in references to dprintf, which wasn't added to POSIX until the 2008 edition and so isn't in various standards containing the syslog functions. This patch fixes this by making dprintf into a weak alias of __dprintf and using __dprintf as appropriate. Tested for x86_64 and x86 (testsuite, and that installed stripped shared libraries are unchanged by the patch). [BZ #18534] * stdio-common/dprintf.c (__dprintf): Use libc_hidden_def. (dprintf): Define as a weak alias of __dprintf, not a strong alias. * include/stdio.h (__dprintf): Declare. Use libc_hidden_proto. * misc/syslog.c (__vsyslog_chk): Call __dprintf instead of dprintf. * conform/Makefile (test-xfail-XPG4/syslog.h/linknamespace): Remove variable. (test-xfail-UNIX98/syslog.h/linknamespace): Likewise. (test-xfail-XOPEN2K/syslog.h/linknamespace): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 3d03d20f7c7..abc52cc07b8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2015-06-17 Joseph Myers + [BZ #18534] + * stdio-common/dprintf.c (__dprintf): Use libc_hidden_def. + (dprintf): Define as a weak alias of __dprintf, not a strong + alias. + * include/stdio.h (__dprintf): Declare. Use libc_hidden_proto. + * misc/syslog.c (__vsyslog_chk): Call __dprintf instead of + dprintf. + * conform/Makefile (test-xfail-XPG4/syslog.h/linknamespace): + Remove variable. + (test-xfail-UNIX98/syslog.h/linknamespace): Likewise. + (test-xfail-XOPEN2K/syslog.h/linknamespace): Likewise. + [BZ #18533] * misc/syslog.c (vsyslog): Define as a weak alias of __vsyslog, not a strong alias. diff --git a/NEWS b/NEWS index ad388adbc3d..a0ebe589898 100644 --- a/NEWS +++ b/NEWS @@ -22,7 +22,7 @@ Version 2.22 18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532, - 18533. + 18533, 18534. * Cache information can be queried via sysconf() function on s390 e.g. with _SC_LEVEL1_ICACHE_SIZE as argument. diff --git a/conform/Makefile b/conform/Makefile index 567046fd16c..9347b0f6a83 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -346,16 +346,13 @@ test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes # Unsorted expected failures. test-xfail-XPG3/unistd.h/linknamespace = yes test-xfail-XPG4/fmtmsg.h/linknamespace = yes -test-xfail-XPG4/syslog.h/linknamespace = yes test-xfail-XPG4/unistd.h/linknamespace = yes test-xfail-POSIX/mqueue.h/linknamespace = yes test-xfail-POSIX/semaphore.h/linknamespace = yes test-xfail-UNIX98/fmtmsg.h/linknamespace = yes test-xfail-UNIX98/mqueue.h/linknamespace = yes -test-xfail-UNIX98/syslog.h/linknamespace = yes test-xfail-UNIX98/unistd.h/linknamespace = yes test-xfail-UNIX98/wchar.h/linknamespace = yes test-xfail-XOPEN2K/fmtmsg.h/linknamespace = yes -test-xfail-XOPEN2K/syslog.h/linknamespace = yes test-xfail-POSIX2008/semaphore.h/linknamespace = yes test-xfail-XOPEN2K8/fmtmsg.h/linknamespace = yes diff --git a/include/stdio.h b/include/stdio.h index 6ae70a35f49..9cd324bfe00 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -135,6 +135,9 @@ extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *); # endif libc_hidden_proto (dprintf) +extern __typeof (dprintf) __dprintf + __attribute__ ((__format__ (__printf__, 2, 3))); +libc_hidden_proto (__dprintf) libc_hidden_proto (fprintf) libc_hidden_proto (vfprintf) libc_hidden_proto (sprintf) diff --git a/misc/syslog.c b/misc/syslog.c index 35cae6c0771..9dd4cde18ce 100644 --- a/misc/syslog.c +++ b/misc/syslog.c @@ -298,7 +298,7 @@ __vsyslog_chk(int pri, int flag, const char *fmt, va_list ap) if (LogStat & LOG_CONS && (fd = __open(_PATH_CONSOLE, O_WRONLY|O_NOCTTY, 0)) >= 0) { - dprintf (fd, "%s\r\n", buf + msgoff); + __dprintf (fd, "%s\r\n", buf + msgoff); (void)__close(fd); } } diff --git a/stdio-common/dprintf.c b/stdio-common/dprintf.c index 3221cf0122c..5a7011dc524 100644 --- a/stdio-common/dprintf.c +++ b/stdio-common/dprintf.c @@ -35,5 +35,6 @@ __dprintf (int d, const char *format, ...) return done; } +libc_hidden_def (__dprintf) ldbl_hidden_def (__dprintf, dprintf) -ldbl_strong_alias (__dprintf, dprintf) +ldbl_weak_alias (__dprintf, dprintf)