Date: Wed, 27 Mar 2002 15:48:24 +1100 (EST) From: Bruce Evans <bde@zeta.org.au> To: markm@FreeBSD.ORG Cc: audit@FreeBSD.ORG Subject: Re: Library __progname cleanups - commit candidate Message-ID: <20020327151238.W2670-100000@gamplex.bde.org> In-Reply-To: <200203261323.g2QDNmER049112@greenpeace.grondar.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 26 Mar 2002 markm@FreeBSD.ORG wrote: > Index: csu/alpha/crt1.c > =================================================================== > RCS file: /home/ncvs/src/lib/csu/alpha/crt1.c,v > retrieving revision 1.10 > diff -u -d -r1.10 crt1.c > --- csu/alpha/crt1.c 26 Oct 2001 06:45:10 -0000 1.10 > +++ csu/alpha/crt1.c 26 Mar 2002 12:11:31 -0000 > @@ -40,6 +40,7 @@ > #endif > > #include <stdlib.h> > +#include <libc_private.h> Angle-bracket includes are bogus for nonstandard includes. They are correctly not used in most places in old code. Also, <libc_private.h> would be unsorted if it belonged with the standard headers. Similarly elsewhere in these patches. > Index: csu/i386/crt0.c > =================================================================== > RCS file: /home/ncvs/src/lib/csu/i386/crt0.c,v > retrieving revision 1.36 > diff -u -d -r1.36 crt0.c > --- csu/i386/crt0.c 27 Aug 1999 23:57:55 -0000 1.36 > +++ csu/i386/crt0.c 26 Mar 2002 12:05:26 -0000 > @@ -37,10 +37,13 @@ > #ifdef DYNAMIC > #include <sys/types.h> > #include <sys/syscall.h> > -#include <a.out.h> > -#include <string.h> > #include <sys/mman.h> <sys/mman.h> is still unsorted. > + > +#include <a.out.h> > #include <link.h> > +#include <string.h> > + > +#include "../../libc/include/libc_private.h" Another bogus path. You just added a -I to the Makefile so that the full path is not needed here. > Index: libc/gen/getprogname.c > =================================================================== > RCS file: /home/ncvs/src/lib/libc/gen/getprogname.c,v > retrieving revision 1.3 > diff -u -d -r1.3 getprogname.c > --- libc/gen/getprogname.c 1 Feb 2002 00:57:29 -0000 1.3 > +++ libc/gen/getprogname.c 26 Mar 2002 08:33:48 -0000 > @@ -3,10 +3,12 @@ > > #include <stdlib.h> This is missing includes of "namespace.h" and "un-namespace.h", except you do things in a nonstandard way. Similarly elsewhere. Not so similarly in err.c above (I limited the scopy of the namespace includes too carefully there, so they don't already cover <stdlib.h>). > > -extern const char *__progname; > +#include <libc_private.h> As usual. > + > +__weak_reference(_getprogname, getprogname); > > const char * > -getprogname(void) > +_getprogname(void) OK. This part of namespace hiding is easy. > Index: libc/gen/setproctitle.c > =================================================================== > RCS file: /home/ncvs/src/lib/libc/gen/setproctitle.c,v > retrieving revision 1.15 > diff -u -d -r1.15 setproctitle.c > --- libc/gen/setproctitle.c 1 Feb 2002 00:57:29 -0000 1.15 > +++ libc/gen/setproctitle.c 25 Mar 2002 21:20:39 -0000 > ... > @@ -83,7 +84,7 @@ > len = 0; > } else { > /* print program name heading for grep */ > - (void) snprintf(buf, sizeof(buf), "%s: ", __progname); > + (void)snprintf(buf, sizeof(buf), "%s: ", _getprogname()); Line too long. > Index: libc/gmon/gmon.c > =================================================================== > RCS file: /home/ncvs/src/lib/libc/gmon/gmon.c,v > retrieving revision 1.13 > diff -u -d -r1.13 gmon.c > --- libc/gmon/gmon.c 15 Feb 2002 02:37:08 -0000 1.13 > +++ libc/gmon/gmon.c 25 Mar 2002 21:22:48 -0000 > @@ -46,20 +46,21 @@ > #include "namespace.h" > #include <err.h> > #include "un-namespace.h" My bad. This inner pair of namespace includes probably breaks the outer pair. The outer pair should already cover <stdlib.h>. > Index: libc/include/libc_private.h > =================================================================== > RCS file: /home/ncvs/src/lib/libc/include/libc_private.h,v > retrieving revision 1.4 > diff -u -d -r1.4 libc_private.h > --- libc/include/libc_private.h 24 Jan 2001 13:00:08 -0000 1.4 > +++ libc/include/libc_private.h 25 Mar 2002 21:19:31 -0000 > @@ -63,4 +63,16 @@ > #define FLOCKFILE(fp) if (__isthreaded) _FLOCKFILE(fp) > #define FUNLOCKFILE(fp) if (__isthreaded) _funlockfile(fp) > > +/* > + * This is a pointer in the C run-time startup code. It is used > + * by getprogname() and setprogname(). > + */ > +extern const char *__progname; > + > +/* > + * Declare an internal version of getprogname() to allow for > + * the programmer declaring her own. > + */ > +const char *_getprogname(void); > + Why not use the standard namespace mechanism? It just happens that this header provides a convenient place to put prototype for the implementatation name so that a less hackish mechanism can be used, but this is surprising. > Index: libc_r/uthread/uthread_spinlock.c > =================================================================== > RCS file: /home/ncvs/src/lib/libc_r/uthread/uthread_spinlock.c,v > retrieving revision 1.9 > diff -u -d -r1.9 uthread_spinlock.c > --- libc_r/uthread/uthread_spinlock.c 24 Jan 2001 13:03:36 -0000 1.9 > +++ libc_r/uthread/uthread_spinlock.c 25 Mar 2002 19:52:44 -0000 > ... > - snprintf(str, sizeof(str), "%s - Warning: Thread %p attempted to lock %p from %s (%d) was left locked from %s (%d)\n", __progname, curthread, lck, fname, lineno, lck->fname, lck->lineno); > + snprintf(str, sizeof(str), "%s - Warning: Thread %p attempted to lock %p from %s (%d) was left locked from %s (%d)\n", _getprogname(), curthread, lck, fname, lineno, lck->fname, lck->lineno); Disgustingly long line longer than before. > Index: libfetch/http.c > =================================================================== > RCS file: /home/ncvs/src/lib/libfetch/http.c,v > retrieving revision 1.51 > diff -u -d -r1.51 http.c > --- libfetch/http.c 5 Feb 2002 22:13:51 -0000 1.51 > +++ libfetch/http.c 25 Mar 2002 19:53:14 -0000 > ... > @@ -840,7 +838,7 @@ > if ((p = getenv("HTTP_USER_AGENT")) != NULL && *p != '\0') > _http_cmd(fd, "User-Agent: %s", p); > else > - _http_cmd(fd, "User-Agent: %s " _LIBFETCH_VER, __progname); > + _http_cmd(fd, "User-Agent: %s " _LIBFETCH_VER, _getprogname()); Long line longer than before. Similarly elsewhere. Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020327151238.W2670-100000>