diff --git a/gst/Makefile.am b/gst/Makefile.am index 0322265130..b6cf720e2e 100644 --- a/gst/Makefile.am +++ b/gst/Makefile.am @@ -26,10 +26,13 @@ else GST_PLUGIN_SRC = gstplugin.c endif -# FIXME: might not be needed if debug logging is disabled +if !GST_DISABLE_GST_DEBUG SUBDIRS_PRINTF = printf GST_PRINTF_LA = printf/libgstprintf.la - +else +SUBDIRS_PRINTF = +GST_PRINTF_LA = +endif SUBDIRS = $(SUBDIRS_PARSE) $(SUBDIRS_PRINTF) diff --git a/gst/gst_private.h b/gst/gst_private.h index e1117c5f2d..61762b25d4 100644 --- a/gst/gst_private.h +++ b/gst/gst_private.h @@ -278,6 +278,11 @@ extern GstDebugCategory *_priv_GST_CAT_POLL; #endif +#ifdef GST_DISABLE_GST_DEBUG +/* for _gst_element_error_printf */ +#define __gst_vasprintf __gst_info_fallback_vasprintf +int __gst_vasprintf (char **result, char const *format, va_list args); +#endif /**** objects made opaque until the private bits have been made private ****/ diff --git a/gst/gstelement.c b/gst/gstelement.c index a46cab5937..587de1b591 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -97,7 +97,9 @@ #include "gst-i18n-lib.h" #include "glib-compat-private.h" +#ifndef GST_DISABLE_GST_DEBUG #include "printf/printf.h" +#endif /* Element signals and args */ enum diff --git a/gst/gstinfo.c b/gst/gstinfo.c index 4b35f98f36..93cb188407 100644 --- a/gst/gstinfo.c +++ b/gst/gstinfo.c @@ -2047,6 +2047,46 @@ _gst_debug_dump_mem (GstDebugCategory * cat, const gchar * file, #endif /* GST_REMOVE_DISABLED */ #endif /* GST_DISABLE_GST_DEBUG */ +/* Need this for _gst_element_error_printf even if GST_REMOVE_DISABLED is set: + * fallback function that cleans up the format string and replaces all pointer + * extension formats with plain %p. */ +#ifdef GST_DISABLE_GST_DEBUG +#include +int +__gst_info_fallback_vasprintf (char **result, char const *format, va_list args) +{ + gchar *clean_format, *c; + gsize len; + + if (format == NULL) + return -1; + + clean_format = g_strdup (format); + c = clean_format; + while ((c = strstr (c, "%p\a"))) { + if (c[3] < 'A' || c[3] > 'Z') { + c += 3; + continue; + } + len = strlen (c + 4); + g_memmove (c + 2, c + 4, len + 1); + c += 2; + } + while ((c = strstr (clean_format, "%P"))) /* old GST_PTR_FORMAT */ + c[1] = 'p'; + while ((c = strstr (clean_format, "%Q"))) /* old GST_SEGMENT_FORMAT */ + c[1] = 'p'; + + len = g_vasprintf (result, clean_format, args); + + g_free (clean_format); + + if (*result == NULL) + return -1; + + return len; +} +#endif #ifdef GST_ENABLE_FUNC_INSTRUMENTATION /* FIXME make this thread specific */