From: Yu Watanabe Date: Sat, 8 Nov 2025 23:44:25 +0000 (+0900) Subject: libarchive-util: several cleanups X-Git-Tag: v259-rc1~122 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0213b6896994ef6a752920c7883242f7732470df;p=thirdparty%2Fsystemd.git libarchive-util: several cleanups - use loop for checking existence of functions, - rename HAVE_LIBARCHIVE_XYZ -> HAVE_ARCHIVE_XYZ to make them match with the function name, - do not conditionally include user-util.h in libarchive-util.h, - sort library function symbols. --- diff --git a/meson.build b/meson.build index ef1b74b1633..c289d7f53a6 100644 --- a/meson.build +++ b/meson.build @@ -1427,10 +1427,16 @@ libarchive = dependency('libarchive', required : get_option('libarchive')) libarchive_cflags = libarchive.partial_dependency(includes: true, compile_args: true) conf.set10('HAVE_LIBARCHIVE', libarchive.found()) -conf.set10('HAVE_LIBARCHIVE_UID_IS_SET', - libarchive.found() and cc.has_function('archive_entry_uid_is_set', dependencies : libarchive)) -conf.set10('HAVE_LIBARCHIVE_HARDLINK_IS_SET', - libarchive.found() and cc.has_function('archive_entry_hardlink_is_set', dependencies : libarchive)) + +foreach ident : [ + 'archive_entry_gid_is_set', # since 3.7.3 + 'archive_entry_uid_is_set', # since 3.7.3 + 'archive_entry_hardlink_is_set', # since 3.7.5 + ] + + have = libarchive.found() and cc.has_function(ident, dependencies : libarchive) + conf.set10('HAVE_' + ident.to_upper(), have) +endforeach libxkbcommon = dependency('xkbcommon', version : '>= 0.3.0', diff --git a/src/shared/libarchive-util.c b/src/shared/libarchive-util.c index 09f036895ce..35083a266f1 100644 --- a/src/shared/libarchive-util.c +++ b/src/shared/libarchive-util.c @@ -3,6 +3,7 @@ #include #include "libarchive-util.h" +#include "user-util.h" #if HAVE_LIBARCHIVE static void *libarchive_dl = NULL; @@ -14,11 +15,15 @@ DLSYM_PROTOTYPE(archive_entry_fflags) = NULL; DLSYM_PROTOTYPE(archive_entry_filetype) = NULL; DLSYM_PROTOTYPE(archive_entry_free) = NULL; DLSYM_PROTOTYPE(archive_entry_gid) = NULL; -#if HAVE_LIBARCHIVE_UID_IS_SET +#if HAVE_ARCHIVE_ENTRY_GID_IS_SET DLSYM_PROTOTYPE(archive_entry_gid_is_set) = NULL; +#else +int sym_archive_entry_gid_is_set(struct archive_entry *e) { + return gid_is_valid(sym_archive_entry_gid(e)); +} #endif DLSYM_PROTOTYPE(archive_entry_hardlink) = NULL; -#if HAVE_LIBARCHIVE_HARDLINK_IS_SET +#if HAVE_ARCHIVE_ENTRY_HARDLINK_IS_SET DLSYM_PROTOTYPE(archive_entry_hardlink_is_set) = NULL; #endif DLSYM_PROTOTYPE(archive_entry_mode) = NULL; @@ -45,8 +50,12 @@ DLSYM_PROTOTYPE(archive_entry_set_uid) = NULL; DLSYM_PROTOTYPE(archive_entry_sparse_add_entry) = NULL; DLSYM_PROTOTYPE(archive_entry_symlink) = NULL; DLSYM_PROTOTYPE(archive_entry_uid) = NULL; -#if HAVE_LIBARCHIVE_UID_IS_SET +#if HAVE_ARCHIVE_ENTRY_UID_IS_SET DLSYM_PROTOTYPE(archive_entry_uid_is_set) = NULL; +#else +int sym_archive_entry_uid_is_set(struct archive_entry *e) { + return uid_is_valid(sym_archive_entry_uid(e)); +} #endif DLSYM_PROTOTYPE(archive_entry_xattr_add_entry) = NULL; DLSYM_PROTOTYPE(archive_entry_xattr_next) = NULL; @@ -86,11 +95,11 @@ int dlopen_libarchive(void) { DLSYM_ARG(archive_entry_filetype), DLSYM_ARG(archive_entry_free), DLSYM_ARG(archive_entry_gid), -#if HAVE_LIBARCHIVE_UID_IS_SET +#if HAVE_ARCHIVE_ENTRY_GID_IS_SET DLSYM_ARG(archive_entry_gid_is_set), #endif DLSYM_ARG(archive_entry_hardlink), -#if HAVE_LIBARCHIVE_HARDLINK_IS_SET +#if HAVE_ARCHIVE_ENTRY_HARDLINK_IS_SET DLSYM_ARG(archive_entry_hardlink_is_set), #endif DLSYM_ARG(archive_entry_mode), @@ -117,7 +126,7 @@ int dlopen_libarchive(void) { DLSYM_ARG(archive_entry_sparse_add_entry), DLSYM_ARG(archive_entry_symlink), DLSYM_ARG(archive_entry_uid), -#if HAVE_LIBARCHIVE_UID_IS_SET +#if HAVE_ARCHIVE_ENTRY_UID_IS_SET DLSYM_ARG(archive_entry_uid_is_set), #endif DLSYM_ARG(archive_entry_xattr_add_entry), diff --git a/src/shared/libarchive-util.h b/src/shared/libarchive-util.h index 615cd1ec810..db1c31d2239 100644 --- a/src/shared/libarchive-util.h +++ b/src/shared/libarchive-util.h @@ -16,7 +16,19 @@ extern DLSYM_PROTOTYPE(archive_entry_fflags); extern DLSYM_PROTOTYPE(archive_entry_filetype); extern DLSYM_PROTOTYPE(archive_entry_free); extern DLSYM_PROTOTYPE(archive_entry_gid); +#if HAVE_ARCHIVE_ENTRY_GID_IS_SET +extern DLSYM_PROTOTYPE(archive_entry_gid_is_set); +#else +int sym_archive_entry_gid_is_set(struct archive_entry *e); +#endif extern DLSYM_PROTOTYPE(archive_entry_hardlink); +#if HAVE_ARCHIVE_ENTRY_HARDLINK_IS_SET +extern DLSYM_PROTOTYPE(archive_entry_hardlink_is_set); +#else +static inline int sym_archive_entry_hardlink_is_set(struct archive_entry *e) { + return !!sym_archive_entry_hardlink(e); +} +#endif extern DLSYM_PROTOTYPE(archive_entry_mode); extern DLSYM_PROTOTYPE(archive_entry_mtime); extern DLSYM_PROTOTYPE(archive_entry_mtime_is_set); @@ -41,6 +53,11 @@ extern DLSYM_PROTOTYPE(archive_entry_set_uid); extern DLSYM_PROTOTYPE(archive_entry_sparse_add_entry); extern DLSYM_PROTOTYPE(archive_entry_symlink); extern DLSYM_PROTOTYPE(archive_entry_uid); +#if HAVE_ARCHIVE_ENTRY_UID_IS_SET +extern DLSYM_PROTOTYPE(archive_entry_uid_is_set); +#else +int sym_archive_entry_uid_is_set(struct archive_entry *e); +#endif extern DLSYM_PROTOTYPE(archive_entry_xattr_add_entry); extern DLSYM_PROTOTYPE(archive_entry_xattr_next); extern DLSYM_PROTOTYPE(archive_entry_xattr_reset); @@ -62,27 +79,6 @@ extern DLSYM_PROTOTYPE(archive_write_open_fd); extern DLSYM_PROTOTYPE(archive_write_set_format_filter_by_ext); extern DLSYM_PROTOTYPE(archive_write_set_format_pax); -#if HAVE_LIBARCHIVE_UID_IS_SET -extern DLSYM_PROTOTYPE(archive_entry_gid_is_set); -extern DLSYM_PROTOTYPE(archive_entry_uid_is_set); -#else -#include "user-util.h" -static inline int sym_archive_entry_gid_is_set(struct archive_entry *e) { - return gid_is_valid(sym_archive_entry_gid(e)); -} -static inline int sym_archive_entry_uid_is_set(struct archive_entry *e) { - return uid_is_valid(sym_archive_entry_uid(e)); -} -#endif - -#if HAVE_LIBARCHIVE_HARDLINK_IS_SET -extern DLSYM_PROTOTYPE(archive_entry_hardlink_is_set); -#else -static inline int sym_archive_entry_hardlink_is_set(struct archive_entry *e) { - return !!sym_archive_entry_hardlink(e); -} -#endif - int dlopen_libarchive(void); DEFINE_TRIVIAL_CLEANUP_FUNC_FULL_RENAME(struct archive_entry*, sym_archive_entry_free, archive_entry_freep, NULL);