From owner-freebsd-audit Sat May 5 0:33:22 2001 Delivered-To: freebsd-audit@freebsd.org Received: from bazooka.unixfreak.org (bazooka.unixfreak.org [63.198.170.138]) by hub.freebsd.org (Postfix) with ESMTP id 5115537B422 for ; Sat, 5 May 2001 00:33:08 -0700 (PDT) (envelope-from dima@unixfreak.org) Received: from spike.unixfreak.org (spike [63.198.170.139]) by bazooka.unixfreak.org (Postfix) with ESMTP id 81D613E0B; Sat, 5 May 2001 00:33:06 -0700 (PDT) To: Bruce Evans Cc: audit@FreeBSD.ORG Subject: Re: {get,set}progname functions In-Reply-To: ; from bde@zeta.org.au on "Fri, 4 May 2001 21:42:37 +1000 (EST)" Date: Sat, 05 May 2001 00:33:05 -0700 From: Dima Dorfman Message-Id: <20010505073306.81D613E0B@bazooka.unixfreak.org> Sender: owner-freebsd-audit@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Bruce Evans writes: > On Tue, 1 May 2001, Dima Dorfman wrote: > > --- /dev/null Tue May 1 20:04:30 2001 > > +++ lib/libc/gen/getprogname.c Tue May 1 22:58:10 2001 > > @@ -0,0 +1,14 @@ > > +#ifndef lint > > +static const char rcsid[] = > > + "$FreeBSD$"; > > +#endif /* not lint */ > > Use LIBC_RCS as well as "lint" here (see libc/gen/err.c; other files > mostly use LIBC_SCCS but I think we plan to change them, at least if > the id is not an sccsid). Fixed in patch below. > > + > > +extern const char * > > + __progname; > > The line break for indenting the variable name is a bit much. This too. Thanks, Dima Dorfman dima@unixfreak.org Index: include/stdlib.h =================================================================== RCS file: /st/src/FreeBSD/src/include/stdlib.h,v retrieving revision 1.20 diff -u -r1.20 stdlib.h --- include/stdlib.h 2001/04/23 09:32:06 1.20 +++ include/stdlib.h 2001/05/05 07:18:38 @@ -157,6 +157,8 @@ int daemon __P((int, int)); char *devname __P((int, int)); int getloadavg __P((double [], int)); +const char * + getprogname __P((void)); char *group_from_gid __P((unsigned long, int)); int heapsort __P((void *, size_t, size_t, @@ -172,6 +174,7 @@ long random __P((void)); void *reallocf __P((void *, size_t)); char *realpath __P((const char *, char resolved_path[])); +void setprogname __P((const char *)); char *setstate __P((char *)); void srandom __P((unsigned long)); void sranddev __P((void)); Index: lib/libc/gen/Makefile.inc =================================================================== RCS file: /st/src/FreeBSD/src/lib/libc/gen/Makefile.inc,v retrieving revision 1.77 diff -u -r1.77 Makefile.inc --- lib/libc/gen/Makefile.inc 2001/04/17 07:59:50 1.77 +++ lib/libc/gen/Makefile.inc 2001/05/05 07:18:38 @@ -13,7 +13,7 @@ getcap.c getcwd.c getdomainname.c getgrent.c getgrouplist.c \ gethostname.c getloadavg.c getlogin.c getmntinfo.c getnetgrent.c \ getobjformat.c getosreldate.c getpagesize.c \ - getpass.c getpwent.c getttyent.c \ + getpass.c getprogname.c getpwent.c getttyent.c \ getusershell.c getvfsbyname.c getvfsent.c glob.c \ initgroups.c isatty.c jrand48.c lcong48.c \ lockf.c lrand48.c mrand48.c msgctl.c \ @@ -22,7 +22,8 @@ pause.c popen.c psignal.c pw_scan.c pwcache.c raise.c readdir.c rewinddir.c \ posixshm.c \ scandir.c seed48.c seekdir.c semconfig.c semctl.c semget.c semop.c \ - setdomainname.c sethostname.c setjmperr.c setmode.c setproctitle.c \ + setdomainname.c sethostname.c setjmperr.c setmode.c setprogname.c \ + setproctitle.c \ shmat.c shmctl.c shmdt.c shmget.c siginterrupt.c siglist.c signal.c \ sigsetops.c sleep.c srand48.c stringlist.c strtofflags.c \ sysconf.c sysctl.c sysctlbyname.c sysctlnametomib.c \ @@ -43,7 +44,7 @@ getdiskbyname.3 getdomainname.3 getfsent.3 \ getgrent.3 getgrouplist.3 gethostname.3 getloadavg.3 \ getmntinfo.3 getnetgrent.3 getobjformat.3 \ - getpagesize.3 getpass.3 getpwent.3 \ + getpagesize.3 getpass.3 getprogname.3 getpwent.3 \ getttyent.3 getusershell.3 getvfsbyname.3 getvfsent.3 \ glob.3 initgroups.3 isinf.3 \ ldexp.3 lockf.3 modf.3 msgctl.3 msgget.3 msgrcv.3 msgsnd.3 \ @@ -82,6 +83,7 @@ MLINKS+=gethostname.3 sethostname.3 MLINKS+=getnetgrent.3 endnetgrent.3 getnetgrent.3 innetgr.3 \ getnetgrent.3 setnetgrent.3 +MLINKS+=getprogname.3 setprogname.3 MLINKS+=getpwent.3 endpwent.3 getpwent.3 getpwnam.3 getpwent.3 getpwuid.3 \ getpwent.3 setpassent.3 getpwent.3 setpwent.3 getpwent.3 setpwfile.3 MLINKS+=getttyent.3 endttyent.3 getttyent.3 getttynam.3 \ --- /dev/null Sat May 5 00:17:13 2001 +++ lib/libc/gen/getprogname.c Fri May 4 20:24:43 2001 @@ -0,0 +1,13 @@ +#if defined(LIBC_RCS) && !defined(lint) +static const char rcsid[] = + "$FreeBSD$"; +#endif /* LIBC_RCS and not lint */ + +extern const char *__progname; + +const char * +getprogname(void) +{ + + return (__progname); +} --- /dev/null Sat May 5 00:17:13 2001 +++ lib/libc/gen/setprogname.c Fri May 4 20:23:51 2001 @@ -0,0 +1,13 @@ +#if defined(LIBC_RCS) && !defined(lint) +static const char rcsid[] = + "$FreeBSD$"; +#endif /* LIBC_RCS and not lint */ + +extern const char *__progname; + +void +setprogname(const char *progname) +{ + + __progname = progname; +} --- /dev/null Sat May 5 00:17:13 2001 +++ lib/libc/gen/getprogname.3 Tue May 1 22:41:23 2001 @@ -0,0 +1,62 @@ +.\" +.\" $FreeBSD$ +.\" +.Dd May 1, 2001 +.Dt GETPROGNAME 3 +.Os +.Sh NAME +.Nm getprogname , +.Nm setprogname +.Nd get or set the program name +.Sh LIBRARY +.Lb libc +.Sh SYNOPSIS +.Fd #include +.Ft const char * +.Fn getprogname "void" +.Ft void +.Fn setprogname "const char *progname" +.Sh DESCRIPTION +The +.Fn getprogname +and +.Fn setprogname +functions manipulate the name of the current program. +They are used by error-reporting routines to produce +consistent output. +.Pp +The +.Fn getprogname +function returns the name of the program. +If the name has not been set yet, it will return +.Dv NULL . +.Pp +The +.Fn setprogname +function sets the name of the program. +Since a pointer to the given string is kept as the program name, +it should not be modified for the rest of the program's lifetime. +.Pp +In +.Fx , +the name of the program is set by the start-up code that is run before +.Fn main ; +thus, +running +.Fn setprogname +is not necessary. +Programs that desire maximum portability should still call it; +on another operating system, +these functions may be implemented in a portability library. +Calling +.Fn setprogname +allows the aforementioned library to learn the program name without +modifications to the start-up code. +.Sh SEE ALSO +.Xr err 3 , +.Xr setproctitle 3 +.Sh HISTORY +These functions first appeared in +.Nx 1.6 , +and made their way into +.Fx 5.0 . To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-audit" in the body of the message