0001
0002
0003
0004
0005
0006
0007
0008 #include "trace/beauty/beauty.h"
0009 #include <linux/kernel.h>
0010 #include <linux/log2.h>
0011
0012 size_t strarray__scnprintf_flags(struct strarray *sa, char *bf, size_t size, bool show_prefix, unsigned long flags)
0013 {
0014 int i, printed = 0;
0015
0016 if (flags == 0) {
0017 const char *s = sa->entries[0];
0018 if (s)
0019 return scnprintf(bf, size, "%s%s", show_prefix ? sa->prefix : "", s);
0020 return scnprintf(bf, size, "%d", 0);
0021 }
0022
0023 for (i = 1; i < sa->nr_entries; ++i) {
0024 unsigned long bit = 1UL << (i - 1);
0025
0026 if (!(flags & bit))
0027 continue;
0028
0029 if (printed != 0)
0030 printed += scnprintf(bf + printed, size - printed, "|");
0031
0032 if (sa->entries[i] != NULL)
0033 printed += scnprintf(bf + printed, size - printed, "%s%s", show_prefix ? sa->prefix : "", sa->entries[i]);
0034 else
0035 printed += scnprintf(bf + printed, size - printed, "0x%#", bit);
0036 }
0037
0038 return printed;
0039 }
0040
0041 static size_t pkey_alloc__scnprintf_access_rights(int access_rights, char *bf, size_t size, bool show_prefix)
0042 {
0043 #include "trace/beauty/generated/pkey_alloc_access_rights_array.c"
0044 static DEFINE_STRARRAY(pkey_alloc_access_rights, "PKEY_");
0045
0046 return strarray__scnprintf_flags(&strarray__pkey_alloc_access_rights, bf, size, show_prefix, access_rights);
0047 }
0048
0049 size_t syscall_arg__scnprintf_pkey_alloc_access_rights(char *bf, size_t size, struct syscall_arg *arg)
0050 {
0051 unsigned long cmd = arg->val;
0052
0053 return pkey_alloc__scnprintf_access_rights(cmd, bf, size, arg->show_string_prefix);
0054 }