]> granicus.if.org Git - strace/blob - uname.c
tests: factor out common shell code to functions
[strace] / uname.c
1 #include "defs.h"
2
3 #include <sys/utsname.h>
4
5 int
6 sys_uname(struct tcb *tcp)
7 {
8         struct utsname uname;
9
10         if (entering(tcp))
11                 return 0;
12
13         if (syserror(tcp) || !verbose(tcp))
14                 tprintf("%#lx", tcp->u_arg[0]);
15         else if (umove(tcp, tcp->u_arg[0], &uname) < 0)
16                 tprints("{...}");
17         else {
18 #define PRINT_UTS_MEMBER(prefix, member) \
19                 tprints(prefix #member "="); \
20                 print_quoted_string(uname.member, sizeof(uname.member), \
21                                     QUOTE_0_TERMINATED)
22
23                 PRINT_UTS_MEMBER("{", sysname);
24                 PRINT_UTS_MEMBER(", ", nodename);
25                 if (abbrev(tcp)) {
26                         tprints(", ...}");
27                         return 0;
28                 }
29                 PRINT_UTS_MEMBER(", ", release);
30                 PRINT_UTS_MEMBER(", ", version);
31                 PRINT_UTS_MEMBER(", ", machine);
32 #ifdef HAVE_STRUCT_UTSNAME_DOMAINNAME
33                 PRINT_UTS_MEMBER(", ", domainname);
34 #endif
35                 tprints("}");
36         }
37
38         return 0;
39 }