summaryrefslogtreecommitdiffstats
path: root/src/shared/dlfcn-util.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 03:50:40 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-12 03:50:40 +0000
commitfc53809803cd2bc2434e312b19a18fa36776da12 (patch)
treeb4b43bd6538f51965ce32856e9c053d0f90919c8 /src/shared/dlfcn-util.c
parentAdding upstream version 255.5. (diff)
downloadsystemd-fc53809803cd2bc2434e312b19a18fa36776da12.tar.xz
systemd-fc53809803cd2bc2434e312b19a18fa36776da12.zip
Adding upstream version 256.upstream/256
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/shared/dlfcn-util.c')
-rw-r--r--src/shared/dlfcn-util.c66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/shared/dlfcn-util.c b/src/shared/dlfcn-util.c
deleted file mode 100644
index 8022f55..0000000
--- a/src/shared/dlfcn-util.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "dlfcn-util.h"
-
-static int dlsym_many_or_warnv(void *dl, int log_level, va_list ap) {
- void (**fn)(void);
-
- /* Tries to resolve a bunch of function symbols, and logs an error about if it cannot resolve one of
- * them. Note that this function possibly modifies the supplied function pointers if the whole
- * operation fails. */
-
- while ((fn = va_arg(ap, typeof(fn)))) {
- void (*tfn)(void);
- const char *symbol;
-
- symbol = va_arg(ap, typeof(symbol));
-
- tfn = (typeof(tfn)) dlsym(dl, symbol);
- if (!tfn)
- return log_full_errno(log_level,
- SYNTHETIC_ERRNO(ELIBBAD),
- "Can't find symbol %s: %s", symbol, dlerror());
- *fn = tfn;
- }
-
- return 0;
-}
-
-int dlsym_many_or_warn_sentinel(void *dl, int log_level, ...) {
- va_list ap;
- int r;
-
- va_start(ap, log_level);
- r = dlsym_many_or_warnv(dl, log_level, ap);
- va_end(ap);
-
- return r;
-}
-
-int dlopen_many_sym_or_warn_sentinel(void **dlp, const char *filename, int log_level, ...) {
- _cleanup_(dlclosep) void *dl = NULL;
- int r;
-
- if (*dlp)
- return 0; /* Already loaded */
-
- dl = dlopen(filename, RTLD_LAZY);
- if (!dl)
- return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
- "%s is not installed: %s", filename, dlerror());
-
- log_debug("Loaded '%s' via dlopen()", filename);
-
- va_list ap;
- va_start(ap, log_level);
- r = dlsym_many_or_warnv(dl, log_level, ap);
- va_end(ap);
-
- if (r < 0)
- return r;
-
- /* Note that we never release the reference here, because there's no real reason to. After all this
- * was traditionally a regular shared library dependency which lives forever too. */
- *dlp = TAKE_PTR(dl);
- return 1;
-}