0001
0002
0003 #include "trace/beauty/beauty.h"
0004 #include <linux/kernel.h>
0005 #include <uapi/linux/fcntl.h>
0006
0007 #ifndef LOCK_MAND
0008 #define LOCK_MAND 32
0009 #endif
0010
0011 #ifndef LOCK_READ
0012 #define LOCK_READ 64
0013 #endif
0014
0015 #ifndef LOCK_WRITE
0016 #define LOCK_WRITE 128
0017 #endif
0018
0019 #ifndef LOCK_RW
0020 #define LOCK_RW 192
0021 #endif
0022
0023 size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg)
0024 {
0025 bool show_prefix = arg->show_string_prefix;
0026 const char *prefix = "LOCK_";
0027 int printed = 0, op = arg->val;
0028
0029 if (op == 0)
0030 return scnprintf(bf, size, "NONE");
0031 #define P_CMD(cmd) \
0032 if ((op & LOCK_##cmd) == LOCK_##cmd) { \
0033 printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #cmd); \
0034 op &= ~LOCK_##cmd; \
0035 }
0036
0037 P_CMD(SH);
0038 P_CMD(EX);
0039 P_CMD(NB);
0040 P_CMD(UN);
0041 P_CMD(MAND);
0042 P_CMD(RW);
0043 P_CMD(READ);
0044 P_CMD(WRITE);
0045 #undef P_OP
0046
0047 if (op)
0048 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", op);
0049
0050 return printed;
0051 }