Date: Tue, 01 May 2001 19:53:21 -0700 From: Dima Dorfman <dima@unixfreak.org> To: audit@freebsd.org Subject: {get,set}progname functions Message-ID: <20010502025322.114703E28@bazooka.unixfreak.org>
next in thread | raw e-mail | index | archive | help
Some time ago, kris sent a message to -arch asking for comments on the inclusion of the getprogname and setprogname functions. These were recently added to NetBSD. Responses to kris' query were generally favorable. The message can be found here: http://docs.FreeBSD.org/cgi/getmsg.cgi?fetch=234758+0+archive/2001/freebsd-arch/20010225.freebsd-arch Attached is a patch to implement these in FreeBSD. Obviously, there's not much to implement since getprogname is a wrapper around a `return', and setprogname is a stub. Please review and, if acceptable, commit it. Thanks in advance, 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/02 02:42:07 @@ -157,6 +157,7 @@ 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 +173,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/02 02:42:07 @@ -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,7 @@ 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 +43,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 +82,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 Tue May 1 19:16:20 2001 +++ lib/libc/gen/getprogname.c Tue May 1 19:41:55 2001 @@ -0,0 +1,12 @@ +/* + * $FreeBSD$ + */ + +extern const char *__progname; /* Program name, from crt0 */ + +const char * +getprogname(void) +{ + + return (__progname); +} --- /dev/null Tue May 1 19:16:20 2001 +++ lib/libc/gen/setprogname.c Tue May 1 19:42:05 2001 @@ -0,0 +1,14 @@ +/* + * $FreeBSD$ + */ + +void +setprogname(const char *progname) +{ + + /* + * In FreeBSD, the program name is set in crt0. This is just + * a stub for programs that want to be more portable. + */ + return; +} --- /dev/null Tue May 1 19:16:20 2001 +++ lib/libc/gen/getprogname.3 Tue May 1 19:41:46 2001 @@ -0,0 +1,61 @@ +.\" +.\" $FreeBSD$ +.\" +.Dd April 27, 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 <stdlib.h> +.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. +The name can only be set once. +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, +.Fn setprogname +is just a stub for use by programs which desire portability: +on other operating systems, +these functions might be implemented in a portability library, +so a call to +.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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010502025322.114703E28>