From: Lennart Poettering Date: Thu, 4 Jun 2020 09:25:46 +0000 (+0200) Subject: util: add dlfcn-util.h X-Git-Tag: v246-rc1~108^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=88d775b734644f26fb490836769c2bc275498fde;p=thirdparty%2Fsystemd.git util: add dlfcn-util.h This just adds a _cleanup_ helper call encapsulating dlclose(). This also means libsystemd-shared is linked against libdl now. I don't think this is much of an issue, since libdl is part of glibc anyway, and anything from exotic. It's not an optional part of the OS (think: NSS requires dynamic linking), hence this pulls in no deps and is almost certainly loaded into all process' memory anyway. [zj: use DEFINE_TRIVIAL_CLEANUP_FUNC().] --- diff --git a/src/basic/dlfcn-util.h b/src/basic/dlfcn-util.h new file mode 100644 index 00000000000..d254afb68b5 --- /dev/null +++ b/src/basic/dlfcn-util.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: LGPL-2.1+ */ +#pragma once + +#include + +#include "macro.h" + +DEFINE_TRIVIAL_CLEANUP_FUNC(void*, dlclose); diff --git a/src/basic/meson.build b/src/basic/meson.build index 5bb49ef4014..90924d6cb89 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build @@ -39,6 +39,7 @@ basic_sources = files(''' device-nodes.h dirent-util.c dirent-util.h + dlfcn-util.h efivars.c efivars.h env-file.c @@ -328,7 +329,8 @@ libbasic = static_library( threads, libcap, libselinux, - libm], + libm, + libdl], c_args : ['-fvisibility=default'], install : false) diff --git a/src/locale/localed.c b/src/locale/localed.c index 8ffcf306b5b..b946060b242 100644 --- a/src/locale/localed.c +++ b/src/locale/localed.c @@ -18,6 +18,7 @@ #include "bus-message.h" #include "bus-polkit.h" #include "def.h" +#include "dlfcn-util.h" #include "keymap-util.h" #include "locale-util.h" #include "macro.h" @@ -530,7 +531,7 @@ static int verify_xkb_rmlvo(const char *model, const char *layout, const char *v }; struct xkb_context *ctx = NULL; struct xkb_keymap *km = NULL; - void *dl; + _cleanup_(dlclosep) void *dl = NULL; int r; /* Compile keymap from RMLVO information to check out its validity */ @@ -582,7 +583,6 @@ finish: if (symbol_xkb_context_unref && ctx) symbol_xkb_context_unref(ctx); - (void) dlclose(dl); return r; } diff --git a/src/locale/meson.build b/src/locale/meson.build index e87a10ebeb5..314b0a3d379 100644 --- a/src/locale/meson.build +++ b/src/locale/meson.build @@ -34,5 +34,5 @@ tests += [ 'src/locale/keymap-util.c', 'src/locale/keymap-util.h'], [libshared], - [libdl]], + []], ]