Changeset View
Changeset View
Standalone View
Standalone View
head/usr.bin/uname/uname.c
Show First 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | |||||
#define NFLAG 0x02 | #define NFLAG 0x02 | ||||
#define PFLAG 0x04 | #define PFLAG 0x04 | ||||
#define RFLAG 0x08 | #define RFLAG 0x08 | ||||
#define SFLAG 0x10 | #define SFLAG 0x10 | ||||
#define VFLAG 0x20 | #define VFLAG 0x20 | ||||
#define IFLAG 0x40 | #define IFLAG 0x40 | ||||
#define UFLAG 0x80 | #define UFLAG 0x80 | ||||
#define KFLAG 0x100 | #define KFLAG 0x100 | ||||
#define BFLAG 0x200 | |||||
typedef void (*get_t)(void); | typedef void (*get_t)(void); | ||||
static get_t get_ident, get_platform, get_hostname, get_arch, | static get_t get_buildid, get_ident, get_platform, get_hostname, get_arch, | ||||
get_release, get_sysname, get_kernvers, get_uservers, get_version; | get_release, get_sysname, get_kernvers, get_uservers, get_version; | ||||
static void native_ident(void); | static void native_ident(void); | ||||
static void native_platform(void); | static void native_platform(void); | ||||
static void native_hostname(void); | static void native_hostname(void); | ||||
static void native_arch(void); | static void native_arch(void); | ||||
static void native_release(void); | static void native_release(void); | ||||
static void native_sysname(void); | static void native_sysname(void); | ||||
static void native_version(void); | static void native_version(void); | ||||
static void native_kernvers(void); | static void native_kernvers(void); | ||||
static void native_uservers(void); | static void native_uservers(void); | ||||
static void native_buildid(void); | |||||
static void print_uname(u_int); | static void print_uname(u_int); | ||||
static void setup_get(void); | static void setup_get(void); | ||||
static void usage(void); | static void usage(void); | ||||
static char *ident, *platform, *hostname, *arch, *release, *sysname, *version, *kernvers, *uservers; | static char *buildid, *ident, *platform, *hostname, *arch, *release, *sysname, | ||||
*version, *kernvers, *uservers; | |||||
static int space; | static int space; | ||||
int | int | ||||
main(int argc, char *argv[]) | main(int argc, char *argv[]) | ||||
{ | { | ||||
u_int flags; | u_int flags; | ||||
int ch; | int ch; | ||||
setup_get(); | setup_get(); | ||||
flags = 0; | flags = 0; | ||||
while ((ch = getopt(argc, argv, "aiKmnoprsUv")) != -1) | while ((ch = getopt(argc, argv, "abiKmnoprsUv")) != -1) | ||||
switch(ch) { | switch(ch) { | ||||
case 'a': | case 'a': | ||||
flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG); | flags |= (MFLAG | NFLAG | RFLAG | SFLAG | VFLAG); | ||||
break; | break; | ||||
case 'b': | |||||
flags |= BFLAG; | |||||
break; | |||||
case 'i': | case 'i': | ||||
flags |= IFLAG; | flags |= IFLAG; | ||||
break; | break; | ||||
case 'K': | case 'K': | ||||
flags |= KFLAG; | flags |= KFLAG; | ||||
break; | break; | ||||
case 'm': | case 'm': | ||||
flags |= MFLAG; | flags |= MFLAG; | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | setup_get(void) | ||||
CHECK_ENV("n", hostname); | CHECK_ENV("n", hostname); | ||||
CHECK_ENV("r", release); | CHECK_ENV("r", release); | ||||
CHECK_ENV("v", version); | CHECK_ENV("v", version); | ||||
CHECK_ENV("m", platform); | CHECK_ENV("m", platform); | ||||
CHECK_ENV("p", arch); | CHECK_ENV("p", arch); | ||||
CHECK_ENV("i", ident); | CHECK_ENV("i", ident); | ||||
CHECK_ENV("K", kernvers); | CHECK_ENV("K", kernvers); | ||||
CHECK_ENV("U", uservers); | CHECK_ENV("U", uservers); | ||||
CHECK_ENV("b", buildid); | |||||
} | } | ||||
#define PRINT_FLAG(flags,flag,var) \ | #define PRINT_FLAG(flags,flag,var) \ | ||||
if ((flags & flag) == flag) { \ | if ((flags & flag) == flag) { \ | ||||
if (space) \ | if (space) \ | ||||
printf(" "); \ | printf(" "); \ | ||||
else \ | else \ | ||||
space++; \ | space++; \ | ||||
Show All 9 Lines | print_uname(u_int flags) | ||||
PRINT_FLAG(flags, NFLAG, hostname); | PRINT_FLAG(flags, NFLAG, hostname); | ||||
PRINT_FLAG(flags, RFLAG, release); | PRINT_FLAG(flags, RFLAG, release); | ||||
PRINT_FLAG(flags, VFLAG, version); | PRINT_FLAG(flags, VFLAG, version); | ||||
PRINT_FLAG(flags, MFLAG, platform); | PRINT_FLAG(flags, MFLAG, platform); | ||||
PRINT_FLAG(flags, PFLAG, arch); | PRINT_FLAG(flags, PFLAG, arch); | ||||
PRINT_FLAG(flags, IFLAG, ident); | PRINT_FLAG(flags, IFLAG, ident); | ||||
PRINT_FLAG(flags, KFLAG, kernvers); | PRINT_FLAG(flags, KFLAG, kernvers); | ||||
PRINT_FLAG(flags, UFLAG, uservers); | PRINT_FLAG(flags, UFLAG, uservers); | ||||
PRINT_FLAG(flags, BFLAG, buildid); | |||||
printf("\n"); | printf("\n"); | ||||
} | } | ||||
#define NATIVE_SYSCTL2_GET(var,mib0,mib1) \ | #define NATIVE_SYSCTL2_GET(var,mib0,mib1) \ | ||||
static void \ | static void \ | ||||
native_##var(void) \ | native_##var(void) \ | ||||
{ \ | { \ | ||||
int mib[] = { (mib0), (mib1) }; \ | int mib[] = { (mib0), (mib1) }; \ | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
} NATIVE_SET; | } NATIVE_SET; | ||||
NATIVE_SYSCTL2_GET(arch, CTL_HW, HW_MACHINE_ARCH) { | NATIVE_SYSCTL2_GET(arch, CTL_HW, HW_MACHINE_ARCH) { | ||||
} NATIVE_SET; | } NATIVE_SET; | ||||
NATIVE_SYSCTLNAME_GET(ident, "kern.ident") { | NATIVE_SYSCTLNAME_GET(ident, "kern.ident") { | ||||
} NATIVE_SET; | } NATIVE_SET; | ||||
NATIVE_SYSCTLNAME_GET(buildid, "kern.build_id") { | |||||
} NATIVE_SET; | |||||
static void | static void | ||||
native_uservers(void) | native_uservers(void) | ||||
{ | { | ||||
static char buf[128]; | static char buf[128]; | ||||
snprintf(buf, sizeof(buf), "%d", __FreeBSD_version); | snprintf(buf, sizeof(buf), "%d", __FreeBSD_version); | ||||
uservers = buf; | uservers = buf; | ||||
} | } | ||||
static void | static void | ||||
native_kernvers(void) | native_kernvers(void) | ||||
{ | { | ||||
static char buf[128]; | static char buf[128]; | ||||
snprintf(buf, sizeof(buf), "%d", getosreldate()); | snprintf(buf, sizeof(buf), "%d", getosreldate()); | ||||
kernvers = buf; | kernvers = buf; | ||||
} | } | ||||
static void | static void | ||||
usage(void) | usage(void) | ||||
{ | { | ||||
fprintf(stderr, "usage: uname [-aiKmnoprsUv]\n"); | fprintf(stderr, "usage: uname [-abiKmnoprsUv]\n"); | ||||
exit(1); | exit(1); | ||||
} | } |