From ea17f21ebff1f0724166dbd1f300bded3e2675f2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 21 Dec 2023 19:09:53 +0300 Subject: [PATCH] uname os detection add --- src/coreutils/uname/uname.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/coreutils/uname/uname.c b/src/coreutils/uname/uname.c index 3587e4d..38d9c1a 100644 --- a/src/coreutils/uname/uname.c +++ b/src/coreutils/uname/uname.c @@ -4,6 +4,26 @@ #include #include +#if defined(__ANDROID__) +#define OS_NAME "Android" + +#elif defined(__linux__) +#define OS_NAME "linux" + +#elif defined(__OpenBSD__) +#define OS_NAME "OpenBSD" + +#elif defined(__FreeBSD_) +#define OS_NAME "FreeBSD" + +#elif defined(__NetBSD_) +#define OS_NAME "NetBSD" + +#else +#define OS_NAME "unknow" + +#endif + int main(int argc, char **argv) { struct utsname uts; if (uname(&uts)) { @@ -19,7 +39,7 @@ int main(int argc, char **argv) { unsigned int a_flag = 0; int opt; - while ((opt = getopt(argc, argv, "asnrvm")) != -1) { + while ((opt = getopt(argc, argv, "asnrvmo")) != -1) { switch (opt) { case 'a': a_flag = 1; @@ -51,10 +71,14 @@ int main(int argc, char **argv) { case 'm': printf("%s ", uts.machine); + /* fallthrough */ + + case 'o': + printf("%s ", OS_NAME); break; default: - printf("uname\n\t[-a All] [-s Sys]\n\t[-n Nodename] [-r Release]\n\t[-v Version] [-m Machine]\n"); + printf("uname\n\t[-a All] [-s Sys]\n\t[-n Nodename] [-r Release]\n\t[-v Version] [-m Machine]\n\t[-o Os name]\n"); return 0; } }