diff options
author | wollman <wollman@FreeBSD.org> | 1994-09-23 20:22:01 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1994-09-23 20:22:01 +0000 |
commit | 89231ffae79ba79bfb400864fb59db987a7d58c7 (patch) | |
tree | 3d4a2fa7663b9a7a0af1d5dcc271c50122be09f4 | |
parent | dd53ce8c4eef861cd13dfe52db7be18938232030 (diff) | |
download | FreeBSD-src-89231ffae79ba79bfb400864fb59db987a7d58c7.zip FreeBSD-src-89231ffae79ba79bfb400864fb59db987a7d58c7.tar.gz |
Added getbootfile(3), for an easy C interface to the kern.bootfile MIB
variable. This one's even documented!
-rw-r--r-- | lib/libc/gen/Makefile.inc | 27 | ||||
-rw-r--r-- | lib/libc/gen/getbootfile.3 | 71 | ||||
-rw-r--r-- | lib/libc/gen/getbootfile.c | 55 |
3 files changed, 140 insertions, 13 deletions
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index fb34e8b..cdf42dd 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -1,24 +1,25 @@ # From: @(#)Makefile.inc 8.3 (Berkeley) 4/16/94 -# $Id$ +# $Id: Makefile.inc,v 1.10 1994/09/23 00:37:43 wollman Exp $ # machine-independent gen sources .PATH: ${.CURDIR}/${MACHINE}/gen ${.CURDIR}/gen SRCS+= alarm.c assert.c clock.c closedir.c confstr.c crypt.c ctermid.c \ daemon.c devname.c disklabel.c err.c errlst.c \ - exec.c fnmatch.c frexp.c fstab.c fts.c getbsize.c getcap.c getcwd.c \ - getdomainname.c getgrent.c getgrouplist.c gethostname.c getloadavg.c \ - getlogin.c getmntinfo.c getnetgrent.c getosreldate.c getpagesize.c \ - getpass.c getpwent.c getttyent.c getusershell.c glob.c initgroups.c \ - isatty.c msgctl.c msgget.c msgrcv.c msgsnd.c nice.c nlist.c \ - ntp_gettime.c opendir.c pause.c popen.c psignal.c pwcache.c raise.c \ - readdir.c rewinddir.c scandir.c seekdir.c semconfig.c semctl.c \ - semget.c semop.c setdomainname.c sethostname.c setjmperr.c setmode.c \ - shmat.c shmctl.c shmdt.c shmget.c siginterrupt.c siglist.c signal.c \ + exec.c fnmatch.c frexp.c fstab.c fts.c getbootfile.c getbsize.c \ + getcap.c getcwd.c getdomainname.c getgrent.c getgrouplist.c \ + gethostname.c getloadavg.c getlogin.c getmntinfo.c getnetgrent.c \ + getosreldate.c getpagesize.c getpass.c getpwent.c getttyent.c \ + getusershell.c getvfsent.c glob.c initgroups.c isatty.c msgctl.c \ + msgget.c msgrcv.c msgsnd.c nice.c nlist.c ntp_gettime.c opendir.c \ + pause.c popen.c psignal.c pwcache.c raise.c readdir.c rewinddir.c \ + scandir.c seekdir.c semconfig.c semctl.c semget.c semop.c \ + setdomainname.c sethostname.c setjmperr.c setmode.c shmat.c \ + shmctl.c shmdt.c shmget.c siginterrupt.c siglist.c signal.c \ sigsetjmp.c sigsetops.c sleep.c sysconf.c sysctl.c syslog.c \ telldir.c termios.c time.c times.c timezone.c ttyname.c ttyslot.c \ ualarm.c uname.c unvis.c usleep.c utime.c valloc.c vis.c wait.c \ - wait3.c waitpid.c getvfsent.c + wait3.c waitpid.c # *rand48 family, from 1.1.5 SRCS+= _rand48.c drand48.c erand48.c jrand48.c lcong48.c lrand48.c \ @@ -36,8 +37,8 @@ errlst.o errlst.po: .endif MAN3+= gen/alarm.3 gen/clock.3 gen/confstr.3 gen/crypt.3 gen/ctermid.3 \ - gen/daemon.3 gen/devname.3 gen/directory.3 gen/err.3 \ - gen/exec.3 gen/fnmatch.3 gen/frexp.3 gen/fts.3 gen/getbsize.3 \ + gen/daemon.3 gen/devname.3 gen/directory.3 gen/err.3 gen/exec.3 \ + gen/fnmatch.3 gen/frexp.3 gen/fts.3 gen/getbsize.3 gen/getbootfile.3 \ gen/getcap.3 gen/getcwd.3 gen/getdiskbyname.3 gen/getfsent.3 \ gen/getgrent.3 gen/getgrouplist.3 gen/gethostname.3 gen/getloadavg.3 \ gen/getmntinfo.3 gen/getnetgrent.3 gen/getpagesize.3 gen/getpass.3 \ diff --git a/lib/libc/gen/getbootfile.3 b/lib/libc/gen/getbootfile.3 new file mode 100644 index 0000000..cfab748 --- /dev/null +++ b/lib/libc/gen/getbootfile.3 @@ -0,0 +1,71 @@ +.\" Copyright (c) 1983, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" From: @(#)gethostname.3 8.1 (Berkeley) 6/4/93 +.\" $Id$ +.\" +.Dd September 23, 1994 +.Dt GETBOOTFILE 3 +.Os +.Sh NAME +.Nm getbootfile +.Nd get kernel boot file name +.Sh SYNOPSIS +.Fd #include <paths.h> +.Ft const char * +.Fn getbootfile void +.Sh DESCRIPTION +The +.Nm getbootfile +function retrieves the full pathname of the file from which the +current kernel was loaded, and returns a static pointer to the name. +A read/write interface to this information is available via the +.Xr sysctl 2 +MIB variable +.Dq Li kern.bootfile . +.Sh RETURN VALUES +If the call succeeds a string giving the pathname is returned. If it +fails, a a null pointer is returned and an error code is +placed in the global location +.Va errno . +.Sh SEE ALSO +.Xr sysctl 2 +.Sh BUGS +If the boot blocks have not been modified to pass this information into +the kernel at boot time, the static string +.Dq Pa /kernel +is returned instead of the real boot file. +.Sh HISTORY +The +.Nm +function call appeared in +.Tn FreeBSD +2.0. diff --git a/lib/libc/gen/getbootfile.c b/lib/libc/gen/getbootfile.c new file mode 100644 index 0000000..909b5f1 --- /dev/null +++ b/lib/libc/gen/getbootfile.c @@ -0,0 +1,55 @@ +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +/*static char sccsid[] = "From: @(#)gethostname.c 8.1 (Berkeley) 6/4/93";*/ +static const char rcsid[] = + "$Id$"; +#endif /* LIBC_SCCS and not lint */ + +#include <sys/param.h> +#include <sys/sysctl.h> + +const char * +getbootfile(void) +{ + static char name[MAXPATHLEN]; + size_t size = sizeof name; + int mib[2]; + + mib[0] = CTL_KERN; + mib[1] = KERN_BOOTFILE; + if (sysctl(mib, 2, name, &size, NULL, 0) == -1) + return (0); + return (name); +} |