diff --git a/meson.build b/meson.build index f6c7279fd5..92ad879f64 100644 --- a/meson.build +++ b/meson.build @@ -544,6 +544,7 @@ assert(long_max > 100000) conf.set_quoted('LONG_MAX_STR', '@0@'.format(long_max)) decl_headers = ''' +#include #include #include #include @@ -553,6 +554,7 @@ foreach decl : ['char16_t', 'char32_t', 'struct mount_attr', 'struct statx', + 'struct dirent64', ] # We get -1 if the size cannot be determined diff --git a/src/basic/dirent-util.h b/src/basic/dirent-util.h index 0f1fb23119..508d34a44f 100644 --- a/src/basic/dirent-util.h +++ b/src/basic/dirent-util.h @@ -36,6 +36,7 @@ struct dirent *readdir_no_dot(DIR *dirp); /* Only if 64bit off_t is enabled struct dirent + struct dirent64 are actually the same. We require this, and * we want them to be interchangeable to make getdents64() work, hence verify that. */ assert_cc(_FILE_OFFSET_BITS == 64); +#if HAVE_STRUCT_DIRENT64 assert_cc(sizeof(struct dirent) == sizeof(struct dirent64)); assert_cc(offsetof(struct dirent, d_ino) == offsetof(struct dirent64, d_ino)); assert_cc(sizeof_field(struct dirent, d_ino) == sizeof_field(struct dirent64, d_ino)); @@ -47,6 +48,7 @@ assert_cc(offsetof(struct dirent, d_type) == offsetof(struct dirent64, d_type)); assert_cc(sizeof_field(struct dirent, d_type) == sizeof_field(struct dirent64, d_type)); assert_cc(offsetof(struct dirent, d_name) == offsetof(struct dirent64, d_name)); assert_cc(sizeof_field(struct dirent, d_name) == sizeof_field(struct dirent64, d_name)); +#endif #define FOREACH_DIRENT_IN_BUFFER(de, buf, sz) \ for (void *_end = (uint8_t*) ({ (de) = (buf); }) + (sz); \