summaryrefslogtreecommitdiff
path: root/lib/libc/gen/__xuname.c
diff options
context:
space:
mode:
authorGarrett Wollman <wollman@FreeBSD.org>1994-10-13 20:31:19 +0000
committerGarrett Wollman <wollman@FreeBSD.org>1994-10-13 20:31:19 +0000
commitb938dc2407fe4b0191ffcc853d464a72528a72f7 (patch)
tree141a2a7f1895425643ea9736061da2e85c722203 /lib/libc/gen/__xuname.c
parent5411ea9d8ccc096c9392402d2acf1c33ec57d78c (diff)
Notes
Diffstat (limited to 'lib/libc/gen/__xuname.c')
-rw-r--r--lib/libc/gen/__xuname.c59
1 files changed, 45 insertions, 14 deletions
diff --git a/lib/libc/gen/__xuname.c b/lib/libc/gen/__xuname.c
index 9857b29acb6cb..1511c1f957fed 100644
--- a/lib/libc/gen/__xuname.c
+++ b/lib/libc/gen/__xuname.c
@@ -32,12 +32,15 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)uname.c 8.1 (Berkeley) 1/4/94";
+/*static char sccsid[] = "From: @(#)uname.c 8.1 (Berkeley) 1/4/94";*/
+static const char rcsid[] =
+ "$Id$";
#endif /* LIBC_SCCS and not lint */
#include <sys/param.h>
#include <sys/sysctl.h>
#include <sys/utsname.h>
+#include <errno.h>
int
uname(name)
@@ -46,45 +49,73 @@ uname(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);
- if (sysctl(mib, 2, &name->sysname, &len, NULL, 0) == -1)
- rval = -1;
+ oerrno = errno;
+ if (sysctl(mib, 2, &name->sysname, &len, NULL, 0) == -1) {
+ if(errno == ENOMEM)
+ errno = oerrno;
+ else
+ rval = -1;
+ }
mib[0] = CTL_KERN;
mib[1] = KERN_HOSTNAME;
len = sizeof(name->nodename);
- if (sysctl(mib, 2, &name->nodename, &len, NULL, 0) == -1)
- rval = -1;
+ oerrno = errno;
+ if (sysctl(mib, 2, &name->nodename, &len, NULL, 0) == -1) {
+ if(errno == ENOMEM)
+ errno = oerrno;
+ else
+ rval = -1;
+ }
mib[0] = CTL_KERN;
mib[1] = KERN_OSRELEASE;
len = sizeof(name->release);
- if (sysctl(mib, 2, &name->release, &len, NULL, 0) == -1)
- rval = -1;
+ oerrno = errno;
+ if (sysctl(mib, 2, &name->release, &len, NULL, 0) == -1) {
+ if(errno == ENOMEM)
+ errno = oerrno;
+ else
+ rval = -1;
+ }
/* The version may have newlines in it, turn them into spaces. */
mib[0] = CTL_KERN;
mib[1] = KERN_VERSION;
len = sizeof(name->version);
- if (sysctl(mib, 2, &name->version, &len, NULL, 0) == -1)
- rval = -1;
- else
- for (p = name->version; len--; ++p)
- if (*p == '\n' || *p == '\t')
+ oerrno = errno;
+ if (sysctl(mib, 2, &name->version, &len, NULL, 0) == -1) {
+ if (errno == ENOMEM)
+ errno = oerrno;
+ else
+ rval = -1;
+ } else {
+ 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);
- if (sysctl(mib, 2, &name->machine, &len, NULL, 0) == -1)
- rval = -1;
+ oerrno = errno;
+ if (sysctl(mib, 2, &name->machine, &len, NULL, 0) == -1) {
+ if (errno == ENOMEM)
+ errno = oerrno;
+ else
+ rval = -1;
+ }
return (rval);
}