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