xref: /original-bsd/lib/libc/gen/uname.c (revision 333da485)
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
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