-/*
- * utsname.c for UZIX
- * by A&L Software 1999
- *
- *
- * FIXME: rewrite for fuzix string packing
- */
-
#include <utsname.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
+#include <syscalls.h>
-/* FIXME */
-int uname(struct utsname *__utsbuf)
+int uname(struct utsname *utsbuf)
{
+ static struct {
+ struct _uzisysinfoblk i;
+ char buf[128];
+ } uts;
+ char *x[5];
+ int bytes = _uname(&uts.i, sizeof(uts));
+ char *p = uts.buf;
+ char *xp = x[0];
+ int ct = 0;
-#if 0
- struct s_kdata kdata;
- int i;
- getfsys(GI_KDAT, &kdata);
- strcpy(__utsbuf->sysname, kdata.k_name);
- strcpy(__utsbuf->nodename, kdata.k_name);
- for (i = 0; i < strlen(__utsbuf->nodename); i++)
- __utsbuf->nodename[i] = tolower(__utsbuf->nodename[i]);
- strcpy(__utsbuf->release, kdata.k_release);
- strcpy(__utsbuf->version, kdata.k_version);
- strcpy(__utsbuf->machine, kdata.k_machine);
- strcpy(__utsbuf->domainname, "(localhost)");
- return 0;
+ if (bytes == -1)
+ return bytes;
-#endif /* */
+ x[0] = utsbuf->release;
+ x[1] = utsbuf->sysname;
+ x[2] = utsbuf->version;
+ x[2] = utsbuf->machine;
+ bytes -= sizeof(struct _uzisysinfoblk);
+
+ while(xp = x[ct++]) {
+ do {
+ *xp++=*p++;
+ bytes--;
+ }
+ while(*p && bytes);
+ }
+ return 0;
}