utsname: add utsname functionality
authorAlan Cox <alan@linux.intel.com>
Sun, 28 Dec 2014 22:28:52 +0000 (22:28 +0000)
committerAlan Cox <alan@linux.intel.com>
Sun, 28 Dec 2014 22:28:52 +0000 (22:28 +0000)
Library/libs/utsname.c

index c7a8143..201f096 100644 (file)
@@ -1,33 +1,36 @@
-/*
- * 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;
 }