From: Pim Zandbergen Date: Wed, 10 Jan 2024 11:15:29 +0000 (+0100) Subject: descrambler: avoid dlopen() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4b1cbd479f3ec3856ed35e5931eab2aff3892fd;p=thirdparty%2Ftvheadend.git descrambler: avoid dlopen() --- diff --git a/src/descrambler/tvhcsa.c b/src/descrambler/tvhcsa.c index 0cd57c292..2c75f8969 100644 --- a/src/descrambler/tvhcsa.c +++ b/src/descrambler/tvhcsa.c @@ -20,6 +20,8 @@ #include #include #include +#define _GNU_SOURCE +#define __USE_GNU #include #include "tvhcsa.h" @@ -31,7 +33,7 @@ #include "descrambler/algo/libdesdec.h" #if ENABLE_DVBCSA -static int dvbcsa_dl_loaded; +static int dvbcsa_dl_scanned; static dvbcsa_dl_bs_key_set_type dvbcsa_dl_bs_key_set_ecm; #endif @@ -273,28 +275,16 @@ void tvhcsa_init ( tvhcsa_t *csa ) { #if ENABLE_DVBCSA - void *dvbcsa_dlh; - - if (!dvbcsa_dl_loaded) + if (!dvbcsa_dl_scanned) { - dvbcsa_dl_loaded++; - dvbcsa_dlh = dlopen(NULL, RTLD_LAZY); - if (dvbcsa_dlh) - { - dvbcsa_dl_bs_key_set_ecm = (dvbcsa_dl_bs_key_set_type) dlsym(dvbcsa_dlh, "dvbcsa_bs_key_set_ecm"); - if (dvbcsa_dl_bs_key_set_ecm) - tvhinfo(LS_DESCRAMBLER, "dvbcsa_bs_key_set_ecm() function detected in libdvbcsa"); - else - { - dlclose(dvbcsa_dlh); - tvhinfo(LS_DESCRAMBLER, "dvbcsa_bs_key_set_ecm() function not detected in libdvbcsa"); - } - } - else - { - dvbcsa_dl_bs_key_set_ecm = NULL; - tvhwarn(LS_DESCRAMBLER, "could not dlopen libdvbcsa"); - } + dvbcsa_dl_scanned++; +#if defined RTLD_DEFAULT + dvbcsa_dl_bs_key_set_ecm = (dvbcsa_dl_bs_key_set_type) dlsym(RTLD_DEFAULT, "dvbcsa_bs_key_set_ecm"); + tvhinfo(LS_DESCRAMBLER, "dvbcsa_bs_key_set_ecm() function%s detected in libdvbcsa", dvbcsa_dl_bs_key_set_ecm ? "" : " not"); +#else + dvbcsa_dl_bs_key_set_ecm = (dvbcsa_dl_bs_key_set_type) NULL; + tvhinfo(LS_DESCRAMBLER, "can not detect dvbcsa_bs_key_set_ecm() function: RTLD_DEFAULT not defined on this system"); +#endif } #endif csa->csa_type = 0;