summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2001-03-24 04:40:49 +0000
committerPeter Wemm <peter@FreeBSD.org>2001-03-24 04:40:49 +0000
commit32e479705ac00771f4fffb87368e38c760129722 (patch)
treeef348dfbd44e661e90721a197ff66ec9e4adcc20 /lib/libc
parentbae3a80b1663a5466d04ff19aa940de2d130304f (diff)
Notes
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/gen/Makefile.inc2
-rw-r--r--lib/libc/gen/__xuname.c11
-rw-r--r--lib/libc/gen/uname.c82
3 files changed, 14 insertions, 81 deletions
diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc
index 93d62a12d5d9..9bc51fdf35a6 100644
--- a/lib/libc/gen/Makefile.inc
+++ b/lib/libc/gen/Makefile.inc
@@ -4,7 +4,7 @@
# machine-independent gen sources
.PATH: ${.CURDIR}/../libc/${MACHINE_ARCH}/gen ${.CURDIR}/../libc/gen
-SRCS+= _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
+SRCS+= __xuname.c _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \
alarm.c arc4random.c assert.c basename.c \
clock.c closedir.c confstr.c \
crypt.c ctermid.c daemon.c devname.c dirname.c disklabel.c \
diff --git a/lib/libc/gen/__xuname.c b/lib/libc/gen/__xuname.c
index 944c2dc3b2ff..d97c4ad7f4ce 100644
--- a/lib/libc/gen/__xuname.c
+++ b/lib/libc/gen/__xuname.c
@@ -43,14 +43,21 @@ static const char rcsid[] =
#include <errno.h>
int
-uname(name)
- struct utsname *name;
+__xuname(int namesize, void *namebuf)
{
int mib[2], rval;
size_t len;
char *p;
int oerrno;
+ struct xutsname {
+ char sysname[namesize]; /* Name of this OS. */
+ char nodename[namesize]; /* Name of this network node. */
+ char release[namesize]; /* Release level. */
+ char version[namesize]; /* Version level. */
+ char machine[namesize]; /* Hardware type. */
+ } *name;
+ name = (struct xutsname *)namebuf;
rval = 0;
mib[0] = CTL_KERN;
diff --git a/lib/libc/gen/uname.c b/lib/libc/gen/uname.c
index 944c2dc3b2ff..75a3f1892dfb 100644
--- a/lib/libc/gen/uname.c
+++ b/lib/libc/gen/uname.c
@@ -37,89 +37,15 @@ static const char rcsid[] =
"$FreeBSD$";
#endif /* LIBC_SCCS and not lint */
+#define uname wrapped_uname
#include <sys/param.h>
#include <sys/sysctl.h>
#include <sys/utsname.h>
#include <errno.h>
+#undef uname
int
-uname(name)
- struct utsname *name;
+uname(struct utsname *name)
{
- int mib[2], rval;
- size_t len;
- char *p;
- int oerrno;
-
- rval = 0;
-
- mib[0] = CTL_KERN;
- mib[1] = KERN_OSTYPE;
- len = sizeof(name->sysname);
- oerrno = errno;
- if (sysctl(mib, 2, &name->sysname, &len, NULL, 0) == -1) {
- if(errno == ENOMEM)
- errno = oerrno;
- else
- rval = -1;
- }
- name->sysname[sizeof(name->sysname) - 1] = '\0';
-
- mib[0] = CTL_KERN;
- mib[1] = KERN_HOSTNAME;
- len = sizeof(name->nodename);
- oerrno = errno;
- if (sysctl(mib, 2, &name->nodename, &len, NULL, 0) == -1) {
- if(errno == ENOMEM)
- errno = oerrno;
- else
- rval = -1;
- }
- name->nodename[sizeof(name->nodename) - 1] = '\0';
-
- mib[0] = CTL_KERN;
- mib[1] = KERN_OSRELEASE;
- len = sizeof(name->release);
- oerrno = errno;
- if (sysctl(mib, 2, &name->release, &len, NULL, 0) == -1) {
- if(errno == ENOMEM)
- errno = oerrno;
- else
- rval = -1;
- }
- name->release[sizeof(name->release) - 1] = '\0';
-
- /* The version may have newlines in it, turn them into spaces. */
- mib[0] = CTL_KERN;
- mib[1] = KERN_VERSION;
- len = sizeof(name->version);
- oerrno = errno;
- if (sysctl(mib, 2, &name->version, &len, NULL, 0) == -1) {
- if (errno == ENOMEM)
- errno = oerrno;
- else
- rval = -1;
- }
- name->version[sizeof(name->version) - 1] = '\0';
- for (p = name->version; len--; ++p) {
- if (*p == '\n' || *p == '\t') {
- if (len > 1)
- *p = ' ';
- else
- *p = '\0';
- }
- }
-
- mib[0] = CTL_HW;
- mib[1] = HW_MACHINE;
- len = sizeof(name->machine);
- oerrno = errno;
- if (sysctl(mib, 2, &name->machine, &len, NULL, 0) == -1) {
- if (errno == ENOMEM)
- errno = oerrno;
- else
- rval = -1;
- }
- name->machine[sizeof(name->machine) - 1] = '\0';
- return (rval);
+ return __xuname(32, name);
}