Merge tag 'arm64-perf' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[linux-2.6-block.git] / tools / perf / trace / beauty / open_flags.c
1
2 static size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size,
3                                                struct syscall_arg *arg)
4 {
5         int printed = 0, flags = arg->val;
6
7         if (!(flags & O_CREAT))
8                 arg->mask |= 1 << (arg->idx + 1); /* Mask the mode parm */
9
10         if (flags == 0)
11                 return scnprintf(bf, size, "RDONLY");
12 #define P_FLAG(n) \
13         if (flags & O_##n) { \
14                 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
15                 flags &= ~O_##n; \
16         }
17
18         P_FLAG(APPEND);
19         P_FLAG(ASYNC);
20         P_FLAG(CLOEXEC);
21         P_FLAG(CREAT);
22         P_FLAG(DIRECT);
23         P_FLAG(DIRECTORY);
24         P_FLAG(EXCL);
25         P_FLAG(LARGEFILE);
26         P_FLAG(NOATIME);
27         P_FLAG(NOCTTY);
28 #ifdef O_NONBLOCK
29         P_FLAG(NONBLOCK);
30 #elif O_NDELAY
31         P_FLAG(NDELAY);
32 #endif
33 #ifdef O_PATH
34         P_FLAG(PATH);
35 #endif
36         P_FLAG(RDWR);
37 #ifdef O_DSYNC
38         if ((flags & O_SYNC) == O_SYNC)
39                 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", "SYNC");
40         else {
41                 P_FLAG(DSYNC);
42         }
43 #else
44         P_FLAG(SYNC);
45 #endif
46         P_FLAG(TRUNC);
47         P_FLAG(WRONLY);
48 #undef P_FLAG
49
50         if (flags)
51                 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
52
53         return printed;
54 }
55
56 #define SCA_OPEN_FLAGS syscall_arg__scnprintf_open_flags