summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2019-08-06 08:37:24 -0400
committerJakob Kaivo <jkk@ung.org>2019-08-06 08:37:24 -0400
commitacb2ef5f83554899af3b0e2b326bce70326a14d2 (patch)
tree95cae65bf64f8ec0a26443ad34ccdffa6d33bac0
parent02c966fdcc80433702b41c21ffca18e446887e6e (diff)
more elegant display of outputHEADmaster
-rw-r--r--uname.c48
1 files changed, 26 insertions, 22 deletions
diff --git a/uname.c b/uname.c
index b9c10fe..52d8616 100644
--- a/uname.c
+++ b/uname.c
@@ -28,12 +28,31 @@
#include <sys/utsname.h>
#include <unistd.h>
+enum {
+ MACHINE = 1<<0,
+ NODENAME = 1<<1,
+ RELEASE = 1<<2,
+ SYSNAME = 1<<3,
+ VERSION = 1<<4
+};
+
+unsigned int print(unsigned int flags, unsigned int field, const char *name)
+{
+ if (flags & field) {
+ printf("%s", name);
+ flags = flags & ~field;
+ if (flags) {
+ putchar(' ');
+ }
+ }
+ return flags;
+}
+
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "");
- enum { MACHINE = 1<<0, NODENAME = 1<<1, RELEASE = 1<<2, SYSNAME = 1<<3,
- VERSION = 1<<4 } show = 0;
+ unsigned int show = 0;
int c;
while ((c = getopt(argc, argv, "amnrsv")) != -1) {
@@ -79,26 +98,11 @@ int main(int argc, char *argv[])
struct utsname uts;
uname(&uts);
- int space = 0;
- if (show & SYSNAME) {
- space = printf("%s", uts.sysname);
- }
-
- if (show & NODENAME) {
- space = printf("%s%s", space ? " " : "", uts.nodename);
- }
-
- if (show & RELEASE) {
- space = printf("%s%s", space ? " " : "", uts.release);
- }
-
- if (show & VERSION) {
- space = printf("%s%s", space ? " " : "", uts.version);
- }
-
- if (show & MACHINE) {
- space = printf("%s%s", space ? " " : "", uts.machine);
- }
+ show = print(show, SYSNAME, uts.sysname);
+ show = print(show, NODENAME, uts.nodename);
+ show = print(show, RELEASE, uts.release);
+ show = print(show, VERSION, uts.version);
+ show = print(show, MACHINE, uts.machine);
putchar('\n');