Skip site navigation (1)Skip section navigation (2)
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>