mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
dirent: conditionalize dirent assert based on dirent64 existence
>=musl-1.2.4 doesn't define dirent64 and its LFS friends as its "native" functions are already LFS-aware. Check for dirent64 in meson.build and only assert if it exists. Bug: https://bugs.gentoo.org/905900 Closes: https://github.com/systemd/systemd/pull/25809
This commit is contained in:
parent
8707dcdf3b
commit
eb29296937
@ -544,6 +544,7 @@ assert(long_max > 100000)
|
||||
conf.set_quoted('LONG_MAX_STR', '@0@'.format(long_max))
|
||||
|
||||
decl_headers = '''
|
||||
#include <dirent.h>
|
||||
#include <uchar.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/stat.h>
|
||||
@ -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
|
||||
|
@ -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); \
|
||||
|
Loading…
Reference in New Issue
Block a user