1 // SPDX-License-Identifier: LGPL-2.1
3 * trace/beauty/fs_at_flags.c
5 * Copyright (C) 2017, Red Hat Inc, Arnaldo Carvalho de Melo <acme@redhat.com>
8 #include "trace/beauty/beauty.h"
10 #include <linux/fcntl.h>
11 #include <linux/log2.h>
14 * uapi/linux/fcntl.h does not keep a copy in tools headers directory,
15 * for system with kernel versions before v5.8, need to sync AT_EACCESS macro.
18 #define AT_EACCESS 0x200
21 #include "trace/beauty/generated/fs_at_flags_array.c"
22 static DEFINE_STRARRAY(fs_at_flags
, "AT_");
24 static size_t fs_at__scnprintf_flags(unsigned long flags
, char *bf
, size_t size
, bool show_prefix
)
26 return strarray__scnprintf_flags(&strarray__fs_at_flags
, bf
, size
, show_prefix
, flags
);
29 size_t syscall_arg__scnprintf_fs_at_flags(char *bf
, size_t size
, struct syscall_arg
*arg
)
31 bool show_prefix
= arg
->show_string_prefix
;
34 return fs_at__scnprintf_flags(flags
, bf
, size
, show_prefix
);
37 static size_t faccessat2__scnprintf_flags(unsigned long flags
, char *bf
, size_t size
, bool show_prefix
)
41 // AT_EACCESS is the same as AT_REMOVEDIR, that is in fs_at_flags_array,
42 // special case it here.
43 if (flags
& AT_EACCESS
) {
45 printed
+= scnprintf(bf
+ printed
, size
- printed
, "%sEACCESS%s",
46 show_prefix
? strarray__fs_at_flags
.prefix
: "", flags
? "|" : "");
49 return strarray__scnprintf_flags(&strarray__fs_at_flags
, bf
+ printed
, size
- printed
, show_prefix
, flags
);
52 size_t syscall_arg__scnprintf_faccessat2_flags(char *bf
, size_t size
, struct syscall_arg
*arg
)
54 bool show_prefix
= arg
->show_string_prefix
;
57 return faccessat2__scnprintf_flags(flags
, bf
, size
, show_prefix
);