From f51019258792a874349f1173e4a3ecf3bb8d9bbc Mon Sep 17 00:00:00 2001 From: Gitea Date: Fri, 11 Dec 2020 07:19:04 -0600 Subject: [PATCH] It works!!! --- uname.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 uname.c diff --git a/uname.c b/uname.c new file mode 100644 index 0000000..77dc40b --- /dev/null +++ b/uname.c @@ -0,0 +1,79 @@ +#include +#include +#include + +/* + Ah, yes. Stuff just to satisfy the GNU project. + I look forward to the day we can start doing + development on our own system with our own + C library. I should really work on that. + + -Kat + */ +#ifdef __GLIBC__ +#define __USE_POSIX2 +#endif +#include + +int main(int argc, char * argv[]) { + /* The utsname struct has to be preallocated for uname() to work. */ + struct utsname * sys_name = malloc(sizeof(*sys_name)); + if(sys_name == NULL) { + fprintf(stderr, "%s: insufficient memory\n", argv[0]); + return 2; + } + int stuff_printed = 0; + char c; + /* + For stuff_print: + 01: -m + 02: -n + 04: -r + 010: -s + 020: -v + 037: -a + */ + int stuff_print = 0; + + while((c = getopt(argc, argv, "amnrsv")) != -1) { + switch(c) { + case 'm': stuff_print |= 01; break; + case 'n': stuff_print |= 02; break; + case 'r': stuff_print |= 04; break; + case 's': stuff_print |= 010; break; + case 'v': stuff_print |= 020; break; + case 'a': stuff_print |= 037; break; + } + if(c == 'a') { break; } + } + + if(stuff_print == 0) { + stuff_print = 010; + } + + int got_uname = 0; + got_uname = uname(sys_name); + if(got_uname == -1) { + fprintf(stderr, "%s: could not get uname\n", argv[0]); + return 1; + } + + if(stuff_print & 010) { + printf("%s ", sys_name->sysname); + } + if(stuff_print & 02) { + printf("%s ", sys_name->nodename); + } + if(stuff_print & 04) { + printf("%s ", sys_name->release); + } + if(stuff_print & 020) { + printf("%s ", sys_name->version); + } + if(stuff_print & 01) { + printf("%s", sys_name->machine); + } + + printf("\n"); + return 0; +} \ No newline at end of file