123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // SPDX-License-Identifier: GPL-2.0
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- /* From include/linux/stat.h */
- #ifndef S_IRWXUGO
- #define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO)
- #endif
- #ifndef S_IALLUGO
- #define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO)
- #endif
- #ifndef S_IRUGO
- #define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH)
- #endif
- #ifndef S_IWUGO
- #define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH)
- #endif
- #ifndef S_IXUGO
- #define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH)
- #endif
- static size_t syscall_arg__scnprintf_mode_t(char *bf, size_t size, struct syscall_arg *arg)
- {
- int printed = 0, mode = arg->val;
- #define P_MODE(n) \
- if ((mode & S_##n) == S_##n) { \
- printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
- mode &= ~S_##n; \
- }
- P_MODE(IALLUGO);
- P_MODE(IRWXUGO);
- P_MODE(IRUGO);
- P_MODE(IWUGO);
- P_MODE(IXUGO);
- P_MODE(IFMT);
- P_MODE(IFSOCK);
- P_MODE(IFLNK);
- P_MODE(IFREG);
- P_MODE(IFBLK);
- P_MODE(IFDIR);
- P_MODE(IFCHR);
- P_MODE(IFIFO);
- P_MODE(ISUID);
- P_MODE(ISGID);
- P_MODE(ISVTX);
- P_MODE(IRWXU);
- P_MODE(IRUSR);
- P_MODE(IWUSR);
- P_MODE(IXUSR);
- P_MODE(IRWXG);
- P_MODE(IRGRP);
- P_MODE(IWGRP);
- P_MODE(IXGRP);
- P_MODE(IRWXO);
- P_MODE(IROTH);
- P_MODE(IWOTH);
- P_MODE(IXOTH);
- #undef P_MODE
- if (mode)
- printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", mode);
- return printed;
- }
- #define SCA_MODE_T syscall_arg__scnprintf_mode_t
|