blob: 0f699d863fdc1ccb142c9713c16bfbf71096719c [file] [log] [blame]
Dmitry V. Levin58dd2cf2014-12-11 19:25:02 +00001#include "defs.h"
2
3#include <sys/utsname.h>
4
Dmitry V. Levina0bd3742015-04-07 01:36:50 +00005SYS_FUNC(uname)
Dmitry V. Levin58dd2cf2014-12-11 19:25:02 +00006{
7 struct utsname uname;
8
Dmitry V. Levin50e13042015-01-24 22:08:07 +00009 if (entering(tcp))
10 return 0;
11
12 if (syserror(tcp) || !verbose(tcp))
13 tprintf("%#lx", tcp->u_arg[0]);
14 else if (umove(tcp, tcp->u_arg[0], &uname) < 0)
15 tprints("{...}");
16 else {
17#define PRINT_UTS_MEMBER(prefix, member) \
18 tprints(prefix #member "="); \
19 print_quoted_string(uname.member, sizeof(uname.member), \
20 QUOTE_0_TERMINATED)
21
22 PRINT_UTS_MEMBER("{", sysname);
23 PRINT_UTS_MEMBER(", ", nodename);
24 if (abbrev(tcp)) {
25 tprints(", ...}");
26 return 0;
Dmitry V. Levin58dd2cf2014-12-11 19:25:02 +000027 }
Dmitry V. Levin50e13042015-01-24 22:08:07 +000028 PRINT_UTS_MEMBER(", ", release);
29 PRINT_UTS_MEMBER(", ", version);
30 PRINT_UTS_MEMBER(", ", machine);
31#ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
32 PRINT_UTS_MEMBER(", ", domainname);
33#endif
34 tprints("}");
Dmitry V. Levin58dd2cf2014-12-11 19:25:02 +000035 }
Dmitry V. Levin50e13042015-01-24 22:08:07 +000036
Dmitry V. Levin58dd2cf2014-12-11 19:25:02 +000037 return 0;
38}