[pulseaudio-discuss] [PATCH] ladspa-sink: fix search path
Georg Chini
georg at chini.tk
Sat Jul 7 09:44:56 UTC 2018
On 04.07.2018 13:25, Tanu Kaskinen wrote:
> Having a single level macro for stringizing LADSPA_PATH doesn't work,
> because the '#' preprocessor operator doesn't expand any macros in its
> parameter. As a result, we used the string "LADSPA_PATH" as the search
> path, and obviously no plugins were ever found.
>
> This adds a two-level macro in macro.h and uses that to expand and
> stringize LADSPA_PATH.
>
> Bug link: https://bugs.freedesktop.org/show_bug.cgi?id=107078
> ---
> src/modules/module-ladspa-sink.c | 14 ++++++--------
> src/pulsecore/macro.h | 6 ++++++
> 2 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/src/modules/module-ladspa-sink.c b/src/modules/module-ladspa-sink.c
> index c654530a3..0bde922bf 100644
> --- a/src/modules/module-ladspa-sink.c
> +++ b/src/modules/module-ladspa-sink.c
> @@ -1054,15 +1054,13 @@ int pa__init(pa_module*m) {
> u->output = NULL;
> u->ss = ss;
>
> - /* If the LADSPA_PATH environment variable is not set, we use the
> - * LADSPA_PATH preprocessor macro instead. The macro can contain characters
> - * that need to be escaped (especially on Windows backslashes are common).
> - * The "#" preprocessor operator helpfully adds the required escaping while
> - * turning the LADSPA_PATH macro into a string. */
> -#define QUOTE_MACRO(x) #x
> if (!(e = getenv("LADSPA_PATH")))
> - e = QUOTE_MACRO(LADSPA_PATH);
> -#undef QUOTE_MACRO
> + /* The LADSPA_PATH preprocessor macro isn't a string literal (i.e. it
> + * doesn't contain quotes), because otherwise the build system would
> + * have an extra burden of getting the escaping right (Windows paths
> + * are especially tricky). PA_EXPAND_AND_STRINGIZE does the necessary
> + * escaping. */
> + e = PA_EXPAND_AND_STRINGIZE(LADSPA_PATH);
>
> /* FIXME: This is not exactly thread safe */
> t = pa_xstrdup(lt_dlgetsearchpath());
> diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h
> index dbce5cd06..bb15b7f01 100644
> --- a/src/pulsecore/macro.h
> +++ b/src/pulsecore/macro.h
> @@ -298,6 +298,12 @@ static inline size_t PA_ALIGN(size_t l) {
> ? (-1 - PA_INT_TYPE_MAX(type)) \
> : (type) 0))
>
> +/* The '#' preprocessor operator doesn't expand any macros that are in the
> + * parameter, which is why we need a separate macro for those cases where the
> + * parameter contains a macro that needs expanding. */
> +#define PA_STRINGIZE(x) #x
> +#define PA_EXPAND_AND_STRINGIZE(x) PA_STRINGIZE(x)
> +
> /* We include this at the very last place */
> #include <pulsecore/log.h>
>
LGTM
More information about the pulseaudio-discuss
mailing list