aboutsummaryrefslogtreecommitdiff
path: root/user/bin/uname.c
blob: 942f330e56b7e28204c305d19ec15be4fb674a7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
 *   FILE: uname.c
 * AUTHOR: kma
 *  DESCR: uname. whee!
 */

#include <stdio.h>
#include <sys/utsname.h>

char *TAS =
    "weenix brought to you by:\n"
    "1998: jal, dep, kma, mcc, cd, tor\n"
    "1999: mbe, tc, kma, mahrens, tor\n"
    "2000: ahl, mahrens, mba, pdemoreu, it\n"
    "2001: pgriess, pdemoreu, gc3, rmanches, dg\n"
    "2002: kit, eschrock\n"
    "2005: afenn\n"
    "2006: afenn\n"
    "2007: dap, joel\n"
    "and the number 0xe\n";

static int doflag(int c);

static struct utsname un;

int main(int argc, char **argv)
{
    int ii;

    uname(&un);

    for (ii = 1; ii < argc; ii++)
    {
        if (argv[ii][0] == '-')
        {
            char *str;
            str = &argv[ii][1];
            while (*str)
            {
                if (doflag(*str++) < 0)
                {
                    goto usage;
                }
            }
        }
    }

    if (argc == 1)
    {
        doflag('s');
    }
    fprintf(stdout, "\n");
    return 0;

usage:
    return 1;
}

static int doflag(int c)
{
    switch (c)
    {
    case 'a':
        printf("%s", TAS);
        printf("%s ", un.sysname);
        printf("%s ", un.nodename);
        printf("%s ", un.release);
        printf("%s ", un.version);
        printf("%s ", un.machine);
        break;
    case 's':
        printf("%s", un.sysname);
        break;
    case 'n':
        printf("%s", un.nodename);
        break;
    case 'r':
        printf("%s", un.release);
        break;
    case 'T':
        printf("%s", TAS);
        break;
    case 'v':
        printf("%s", un.version);
        break;
    case 'm':
        printf("%s", un.machine);
        break;
    default:
        return -1;
    }
    return 0;
}