summaryrefslogtreecommitdiff
path: root/sys/src/ape/cmd/uname.c
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/ape/cmd/uname.c
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/ape/cmd/uname.c')
-rwxr-xr-xsys/src/ape/cmd/uname.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/sys/src/ape/cmd/uname.c b/sys/src/ape/cmd/uname.c
new file mode 100755
index 000000000..6b2cde5ce
--- /dev/null
+++ b/sys/src/ape/cmd/uname.c
@@ -0,0 +1,68 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/utsname.h>
+
+#define ARGBEGIN for((argv0=*argv),argv++,argc--;\
+ argv[0] && argv[0][0]=='-' && argv[0][1];\
+ argc--, argv++) {\
+ char *_args, *_argt, _argc;\
+ _args = &argv[0][1];\
+ if(_args[0]=='-' && _args[1]==0){\
+ argc--; argv++; break;\
+ }\
+ while(*_args) switch(_argc=*_args++)
+#define ARGEND }
+#define ARGF() (_argt=_args, _args="",\
+ (*_argt? _argt: argv[1]? (argc--, *++argv): 0))
+#define ARGC() _argc
+
+char *argv0;
+
+static int started;
+
+static void
+prword(char *w)
+{
+ if (started)
+ putchar(' ');
+ else
+ started = 1;
+ fputs(w, stdout);
+}
+
+main(int argc, char **argv)
+{
+ struct utsname u;
+
+ uname(&u);
+ if(argc == 1){
+ printf("%s\n", u.sysname);
+ exit(0);
+ }
+ ARGBEGIN {
+ case 'a':
+ prword(u.sysname);
+ prword(u.nodename);
+ prword(u.release);
+ prword(u.version);
+ prword(u.machine);
+ break;
+ case 'm':
+ prword(u.machine);
+ break;
+ case 'n':
+ prword(u.nodename);
+ break;
+ case 'r':
+ prword(u.release);
+ break;
+ case 's':
+ prword(u.sysname);
+ break;
+ case 'v':
+ prword(u.version);
+ break;
+ } ARGEND
+ printf("\n");
+ exit(0);
+}