Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: LGPL-2.1
0002 #include <sys/types.h>
0003 #include <sys/stat.h>
0004 #include <unistd.h>
0005 
0006 /* From include/linux/stat.h */
0007 #ifndef S_IRWXUGO
0008 #define S_IRWXUGO   (S_IRWXU|S_IRWXG|S_IRWXO)
0009 #endif
0010 #ifndef S_IALLUGO
0011 #define S_IALLUGO   (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
0012 #endif
0013 #ifndef S_IRUGO
0014 #define S_IRUGO         (S_IRUSR|S_IRGRP|S_IROTH)
0015 #endif
0016 #ifndef S_IWUGO
0017 #define S_IWUGO         (S_IWUSR|S_IWGRP|S_IWOTH)
0018 #endif
0019 #ifndef S_IXUGO
0020 #define S_IXUGO         (S_IXUSR|S_IXGRP|S_IXOTH)
0021 #endif
0022 
0023 static size_t syscall_arg__scnprintf_mode_t(char *bf, size_t size, struct syscall_arg *arg)
0024 {
0025     bool show_prefix = arg->show_string_prefix;
0026     const char *prefix = "S_";
0027     int printed = 0, mode = arg->val;
0028 
0029 #define P_MODE(n) \
0030     if ((mode & S_##n) == S_##n) { \
0031         printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
0032         mode &= ~S_##n; \
0033     }
0034 
0035     P_MODE(IALLUGO);
0036     P_MODE(IRWXUGO);
0037     P_MODE(IRUGO);
0038     P_MODE(IWUGO);
0039     P_MODE(IXUGO);
0040     P_MODE(IFMT);
0041     P_MODE(IFSOCK);
0042     P_MODE(IFLNK);
0043     P_MODE(IFREG);
0044     P_MODE(IFBLK);
0045     P_MODE(IFDIR);
0046     P_MODE(IFCHR);
0047     P_MODE(IFIFO);
0048     P_MODE(ISUID);
0049     P_MODE(ISGID);
0050     P_MODE(ISVTX);
0051     P_MODE(IRWXU);
0052     P_MODE(IRUSR);
0053     P_MODE(IWUSR);
0054     P_MODE(IXUSR);
0055     P_MODE(IRWXG);
0056     P_MODE(IRGRP);
0057     P_MODE(IWGRP);
0058     P_MODE(IXGRP);
0059     P_MODE(IRWXO);
0060     P_MODE(IROTH);
0061     P_MODE(IWOTH);
0062     P_MODE(IXOTH);
0063 #undef P_MODE
0064 
0065     if (mode)
0066         printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", mode);
0067 
0068     return printed;
0069 }
0070 
0071 #define SCA_MODE_T syscall_arg__scnprintf_mode_t