Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cris-mirror.git] / tools / perf / trace / beauty / open_flags.c
blobf55a4597fc3831d9898cd2ac99919ce9e57be840
1 #include <sys/types.h>
2 #include <sys/stat.h>
3 #include <fcntl.h>
5 #ifndef O_DIRECT
6 #define O_DIRECT 00040000
7 #endif
9 #ifndef O_DIRECTORY
10 #define O_DIRECTORY 00200000
11 #endif
13 #ifndef O_NOATIME
14 #define O_NOATIME 01000000
15 #endif
17 static size_t syscall_arg__scnprintf_open_flags(char *bf, size_t size,
18 struct syscall_arg *arg)
20 int printed = 0, flags = arg->val;
22 if (!(flags & O_CREAT))
23 arg->mask |= 1 << (arg->idx + 1); /* Mask the mode parm */
25 if (flags == 0)
26 return scnprintf(bf, size, "RDONLY");
27 #define P_FLAG(n) \
28 if (flags & O_##n) { \
29 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
30 flags &= ~O_##n; \
33 P_FLAG(APPEND);
34 P_FLAG(ASYNC);
35 P_FLAG(CLOEXEC);
36 P_FLAG(CREAT);
37 P_FLAG(DIRECT);
38 P_FLAG(DIRECTORY);
39 P_FLAG(EXCL);
40 P_FLAG(LARGEFILE);
41 P_FLAG(NOATIME);
42 P_FLAG(NOCTTY);
43 #ifdef O_NONBLOCK
44 P_FLAG(NONBLOCK);
45 #elif O_NDELAY
46 P_FLAG(NDELAY);
47 #endif
48 #ifdef O_PATH
49 P_FLAG(PATH);
50 #endif
51 P_FLAG(RDWR);
52 #ifdef O_DSYNC
53 if ((flags & O_SYNC) == O_SYNC)
54 printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", "SYNC");
55 else {
56 P_FLAG(DSYNC);
58 #else
59 P_FLAG(SYNC);
60 #endif
61 P_FLAG(TRUNC);
62 P_FLAG(WRONLY);
63 #undef P_FLAG
65 if (flags)
66 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
68 return printed;
71 #define SCA_OPEN_FLAGS syscall_arg__scnprintf_open_flags