52 lines · c
1// SPDX-License-Identifier: LGPL-2.12 3#include "trace/beauty/beauty.h"4#include <linux/kernel.h>5#include <linux/fcntl.h>6 7#ifndef LOCK_MAND8#define LOCK_MAND 329#endif10 11#ifndef LOCK_READ12#define LOCK_READ 6413#endif14 15#ifndef LOCK_WRITE16#define LOCK_WRITE 12817#endif18 19#ifndef LOCK_RW20#define LOCK_RW 19221#endif22 23size_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(bf, size, "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_OP46 47 if (op)48 printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", op);49 50 return printed;51}52