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