Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: LGPL-2.1
0002 /*
0003  * trace/beauty/pkey_alloc.c
0004  *
0005  *  Copyright (C) 2017, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
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 }