summaryrefslogtreecommitdiff
path: root/dir.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2024-07-17 12:00:27 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2024-07-17 12:00:27 +0900
commit05502c1ddad8ab78ce1d45baf241af598d53a7d1 (patch)
tree1102d17f8c201e2b97f66ac8078c486978dfe272 /dir.c
parent371790165f65d195a1dd6bd615dc6fd42eed8f94 (diff)
Add a macro to initialize `struct getattrlist_args`
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11180
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c33
1 files changed, 8 insertions, 25 deletions
diff --git a/dir.c b/dir.c
index 10ed7e62cd..84687227a2 100644
--- a/dir.c
+++ b/dir.c
@@ -153,6 +153,9 @@ struct getattrlist_args {
unsigned int options;
};
+# define GETATTRLIST_ARGS(list_, buf_, options_) (struct getattrlist_args) \
+ {.list = list_, .buf = buf_, .size = sizeof(buf_), .options = options_}
+
static void *
nogvl_getattrlist(void *args)
{
@@ -196,11 +199,7 @@ need_normalization(DIR *dirp, const char *path)
# if defined HAVE_FGETATTRLIST || defined HAVE_GETATTRLIST
u_int32_t attrbuf[SIZEUP32(fsobj_tag_t)];
struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_OBJTAG,};
- struct getattrlist_args args;
- args.list = &al;
- args.buf = attrbuf;
- args.size = sizeof(attrbuf);
- args.options = 0;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, 0);
# if defined HAVE_FGETATTRLIST
int ret = gvl_fgetattrlist(&args, dirfd(dirp));
# else
@@ -601,11 +600,7 @@ dir_initialize(rb_execution_context_t *ec, VALUE dir, VALUE dirname, VALUE enc)
else if (e == EIO) {
u_int32_t attrbuf[1];
struct attrlist al = {ATTR_BIT_MAP_COUNT, 0};
- struct getattrlist_args args;
- args.list = &al;
- args.buf = attrbuf;
- args.size = sizeof(attrbuf);
- args.options = FSOPT_NOFOLLOW;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, FSOPT_NOFOLLOW);
if (gvl_getattrlist(&args, path) == 0) {
dp->dir = opendir_without_gvl(path);
}
@@ -2185,11 +2180,7 @@ is_case_sensitive(DIR *dirp, const char *path)
const vol_capabilities_attr_t *const cap = attrbuf[0].cap;
const int idx = VOL_CAPABILITIES_FORMAT;
const uint32_t mask = VOL_CAP_FMT_CASE_SENSITIVE;
- struct getattrlist_args args;
- args.list = &al;
- args.buf = attrbuf;
- args.size = sizeof(attrbuf);
- args.options = FSOPT_NOFOLLOW;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, FSOPT_NOFOLLOW);
# if defined HAVE_FGETATTRLIST
int ret = gvl_fgetattrlist(&args, dirfd(dirp));
# else
@@ -2220,11 +2211,7 @@ replace_real_basename(char *path, long base, rb_encoding *enc, int norm_p, int f
IF_NORMALIZE_UTF8PATH(VALUE utf8str = Qnil);
*type = path_noent;
- struct getattrlist_args args;
- args.list = &al;
- args.buf = attrbuf;
- args.size = sizeof(attrbuf);
- args.options = FSOPT_NOFOLLOW;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, FSOPT_NOFOLLOW);
if (gvl_getattrlist(&args, path)) {
if (!to_be_ignored(errno))
sys_warning(path, enc);
@@ -3761,11 +3748,7 @@ rb_dir_s_empty_p(VALUE obj, VALUE dirname)
{
u_int32_t attrbuf[SIZEUP32(fsobj_tag_t)];
struct attrlist al = {ATTR_BIT_MAP_COUNT, 0, ATTR_CMN_OBJTAG,};
- struct getattrlist_args args;
- args.list = &al;
- args.buf = attrbuf;
- args.size = sizeof(attrbuf);
- args.options = 0;
+ struct getattrlist_args args = GETATTRLIST_ARGS(&al, attrbuf, 0);
if (gvl_getattrlist(&args, path) != 0)
rb_sys_fail_path(orig);
if (*(const fsobj_tag_t *)(attrbuf+1) == VT_HFS) {