* You may not use this file except in compliance with the License.
*/
+#define _GNU_SOURCE
#include <uk/config.h>
#include <string.h>
PT_DIRFD, /* File descriptor number of directory */
PT_PID, /* PID number */
PT_OFLAGS,
+ PT_OKFLAGS,
PT_PROTFLAGS,
PT_MAPFLAGS,
PT_FUTEXOP,
PR_FLAG_END(sb, fmtf, orig_seek, oflags);
}
+static inline void param_okflag(struct uk_streambuf *sb, int fmtf, int okflags)
+{
+ __sz orig_seek = uk_streambuf_seek(sb);
+
+ if (okflags == 0) {
+ uk_streambuf_shcc(sb, fmtf, FLAGS);
+ uk_streambuf_strcpy(sb, "F_OK");
+ uk_streambuf_shcc(sb, fmtf, RESET);
+ return;
+ }
+ PR_FLAG(sb, fmtf, orig_seek, R_, OK, okflags);
+ PR_FLAG(sb, fmtf, orig_seek, W_, OK, okflags);
+ PR_FLAG(sb, fmtf, orig_seek, X_, OK, okflags);
+ PR_FLAG_END(sb, fmtf, orig_seek, okflags);
+}
+
#if CONFIG_LIBPOSIX_MMAP || CONFIG_LIBUKMMAP
#include <sys/mman.h>
case PT_OFLAGS:
param_oflags(sb, fmtf, param);
break;
+ case PT_OKFLAGS:
+ param_okflag(sb, fmtf, param);
+ break;
#if CONFIG_LIBPOSIX_MMAP || CONFIG_LIBUKMMAP
case PT_PROTFLAGS:
param_protflags(sb, fmtf, param);
break;
#endif /* HAVE_uk_syscall_clone */
+#ifdef HAVE_uk_syscall_access
+ case SYS_access:
+ VPR_SYSCALL(sb, fmtf, syscall_num, args, rc == 0,
+ PT_PATH, PT_OKFLAGS);
+ PR_SYSRET(sb, fmtf, PT_STATUS, rc);
+ break;
+#endif /* HAVE_uk_syscall_access */
+
#ifdef HAVE_uk_syscall_uname
case SYS_uname:
VPR_SYSCALL(sb, fmtf, syscall_num, args, rc == 0,