diff options
author | Rob Landley <rob@landley.net> | 2008-11-27 07:31:34 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2008-11-27 07:31:34 -0600 |
commit | 8ee966f83218008f04d4c19d0ea7a5fbb039e045 (patch) | |
tree | e505f3443e1de045baacfaa2d60fa417e0bd5032 | |
parent | a605d68ac03543b383ba5b1ad2963a92b584bac0 (diff) | |
download | toybox-8ee966f83218008f04d4c19d0ea7a5fbb039e045.tar.gz |
Add uname
-rw-r--r-- | toys/uname.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/toys/uname.c b/toys/uname.c new file mode 100644 index 00000000..fe762389 --- /dev/null +++ b/toys/uname.c @@ -0,0 +1,75 @@ +/* vi: set sw=4 ts=4: + * + * uname.c - return system name + * + * Copyright 2008 Rob Landley <rob@landley.net> + * + * See http://www.opengroup.org/onlinepubs/009695399/utilities/uname.html + +USE_UNAME(NEWTOY(uname, "amvrns", TOYFLAG_BIN)) + +config UNAME + bool "uname" + default y + help + usage: uname [-asnrvmpio] + + Print system information. + + -s System name + -n Network (domain) name + -r Release number + -v Version (build date) + -m Machine (hardware) name + -a All of the above +*/ + +#include "toys.h" +#include <sys/utsname.h> + +// If a 32 bit x86 build environment working in a chroot under an x86-64 +// kernel returns x86_64 for -m it confuses ./configure. Special case it. + +#if defined(__i686__) +#define GROSS "i686" +#elif defined(__i586__) +#define GROSS "i586" +#elif defined(__i486__) +#define GROSS "i486" +#elif defined(__i386__) +#define GROSS "i386" +#endif + +#define FLAG_a (1<<5) + +void uname_main(void) +{ + int i, flags = toys.optflags, needspace=0; + + uname((void *)toybuf); + + if (!flags) flags=1; + for (i=0; i<5; i++) { + char *c = toybuf+(65*i); + + if (flags & ((1<<i)|FLAG_a)) { + int len = strlen(c); + + // This problem originates in autoconf, so of course the solution + // is horribly ugly. +#ifdef GROSS + if (i==4 && !strcmp(c,"x86_64")) printf(GROSS) + else +#endif + + if (needspace++) { + // We can't decrement on the first entry, because + // needspace would be 0 + *(--c)=' '; + len++; + } + xwrite(1, c, len); + } + } + putchar('\n'); +} |