| 1 | // SPDX-License-Identifier: LGPL-2.1 |
| 2 | |
| 3 | #include "trace/beauty/beauty.h" |
| 4 | #include <linux/kernel.h> |
| 5 | #include <linux/fcntl.h> |
| 6 | |
| 7 | #ifndef LOCK_MAND |
| 8 | #define LOCK_MAND 32 |
| 9 | #endif |
| 10 | |
| 11 | #ifndef LOCK_READ |
| 12 | #define LOCK_READ 64 |
| 13 | #endif |
| 14 | |
| 15 | #ifndef LOCK_WRITE |
| 16 | #define LOCK_WRITE 128 |
| 17 | #endif |
| 18 | |
| 19 | #ifndef LOCK_RW |
| 20 | #define LOCK_RW 192 |
| 21 | #endif |
| 22 | |
| 23 | size_t syscall_arg__scnprintf_flock(char *bf, size_t size, struct syscall_arg *arg) |
| 24 | { |
| 25 | bool show_prefix = arg->show_string_prefix; |
| 26 | const char *prefix = "LOCK_" ; |
| 27 | int printed = 0, op = arg->val; |
| 28 | |
| 29 | if (op == 0) |
| 30 | return scnprintf(buf: bf, size, fmt: "NONE" ); |
| 31 | #define P_CMD(cmd) \ |
| 32 | if ((op & LOCK_##cmd) == LOCK_##cmd) { \ |
| 33 | printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #cmd); \ |
| 34 | op &= ~LOCK_##cmd; \ |
| 35 | } |
| 36 | |
| 37 | P_CMD(SH); |
| 38 | P_CMD(EX); |
| 39 | P_CMD(NB); |
| 40 | P_CMD(UN); |
| 41 | P_CMD(MAND); |
| 42 | P_CMD(RW); |
| 43 | P_CMD(READ); |
| 44 | P_CMD(WRITE); |
| 45 | #undef P_OP |
| 46 | |
| 47 | if (op) |
| 48 | printed += scnprintf(buf: bf + printed, size: size - printed, fmt: "%s%#x" , printed ? "|" : "" , op); |
| 49 | |
| 50 | return printed; |
| 51 | } |
| 52 | |