You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
1.2 KiB

#include <stdio.h>
#include <err.h>
#include <sys/utsname.h>
__attribute__((noreturn))
void usage(void)
{
printf( "usage:\n"
"%s [-amnrsv]\n"
"\n"
"-a print all utsname data\n"
"-m hardware name\n"
"-n host name\n"
"-r OS release\n"
"-s OS name\n"
"-v OS version\n"
"\n", __progname);
exit(-1);
}
int main(int argc, char **argv)
{
int sys, nn, rel, ver, mach;
sys = nn = rel = ver = mach = 0;
int isopt = 0;
int c;
while ((c = getopt(argc, argv, "amnrsv")) != -1) {
isopt = 1;
switch (c) {
case 'a':
sys = nn = rel = ver = mach = 1;
break;
case 'm':
mach = 1;
break;
case 'n':
nn = 1;
break;
case 'r':
rel = 1;
break;
case 's':
sys = 1;
break;
case 'v':
ver = 1;
break;
default:
usage();
}
}
if (!isopt)
sys = 1;
struct utsname un;
if (uname(&un))
err(-1, "uname (wut)");
int sp = 0;
#define PR(f) do { const char *_fmt; \
if (sp) _fmt = " %s"; \
else _fmt = "%s"; \
printf(_fmt, un.f); \
sp = 1; \
} while(0)
if (sys)
PR(sysname);
if (nn)
PR(nodename);
if (rel)
PR(release);
if (ver)
PR(version);
if (mach)
PR(machine);
printf("\n");
return 0;
}