1 /*-
2 * Copyright (c) 1994
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #if defined(LIBC_SCCS) && !defined(lint)
9 static char sccsid[] = "@(#)uname.c 8.1 (Berkeley) 01/04/94";
10 #endif /* LIBC_SCCS and not lint */
11
12 #include <sys/param.h>
13 #include <sys/sysctl.h>
14 #include <sys/utsname.h>
15
16 int
uname(name)17 uname(name)
18 struct utsname *name;
19 {
20 int mib[2], rval;
21 size_t len;
22 char *p;
23
24 rval = 0;
25
26 mib[0] = CTL_KERN;
27 mib[1] = KERN_OSTYPE;
28 len = sizeof(name->sysname);
29 if (sysctl(mib, 2, &name->sysname, &len, NULL, 0) == -1)
30 rval = -1;
31
32 mib[0] = CTL_KERN;
33 mib[1] = KERN_HOSTNAME;
34 len = sizeof(name->nodename);
35 if (sysctl(mib, 2, &name->nodename, &len, NULL, 0) == -1)
36 rval = -1;
37
38 mib[0] = CTL_KERN;
39 mib[1] = KERN_OSRELEASE;
40 len = sizeof(name->release);
41 if (sysctl(mib, 2, &name->release, &len, NULL, 0) == -1)
42 rval = -1;
43
44 /* The version may have newlines in it, turn them into spaces. */
45 mib[0] = CTL_KERN;
46 mib[1] = KERN_VERSION;
47 len = sizeof(name->version);
48 if (sysctl(mib, 2, &name->version, &len, NULL, 0) == -1)
49 rval = -1;
50 else
51 for (p = name->version; len--; ++p)
52 if (*p == '\n' || *p == '\t')
53 if (len > 1)
54 *p = ' ';
55 else
56 *p = '\0';
57
58 mib[0] = CTL_HW;
59 mib[1] = HW_MACHINE;
60 len = sizeof(name->machine);
61 if (sysctl(mib, 2, &name->machine, &len, NULL, 0) == -1)
62 rval = -1;
63 return (rval);
64 }
65