diff options
Diffstat (limited to 'tumbler')
-rw-r--r-- | tumbler/tumbler-util.c | 37 | ||||
-rw-r--r-- | tumbler/tumbler-util.h | 2 |
2 files changed, 39 insertions, 0 deletions
diff --git a/tumbler/tumbler-util.c b/tumbler/tumbler-util.c index 04c434d..cfc1172 100644 --- a/tumbler/tumbler-util.c +++ b/tumbler/tumbler-util.c @@ -85,6 +85,43 @@ tumbler_util_dump_strv (const gchar *log_domain, +/* + * This is intended to be used around too verbose third-party APIs we can't silence by + * another means: + * tumbler_util_toggle_stderr (G_LOG_DOMAIN); + * … = too_verbose_api (…); + * tumbler_util_toggle_stderr (G_LOG_DOMAIN); + * When debug logging is enabled, it does nothing. + */ +void +tumbler_util_toggle_stderr (const gchar *log_domain) +{ + static gint stderr_save = -2; + + /* do nothing in case of previous error or if debug logging is enabled */ + if (stderr_save == -1 || tumbler_util_is_debug_logging_enabled (log_domain)) + return; + + /* redirect stderr to /dev/null */ + if (stderr_save == -2) + { + fflush (stderr); + stderr_save = dup (STDERR_FILENO); + if (stderr_save != -1 && freopen ("/dev/null", "a", stderr) == NULL) + stderr_save = -1; + } + /* restore stderr to stderr_save */ + else + { + fflush (stderr); + stderr_save = dup2 (stderr_save, STDERR_FILENO); + if (stderr_save != -1) + stderr_save = -2; + } +} + + + gchar ** tumbler_util_get_supported_uri_schemes (void) { diff --git a/tumbler/tumbler-util.h b/tumbler/tumbler-util.h index 20a0cc3..24c7d29 100644 --- a/tumbler/tumbler-util.h +++ b/tumbler/tumbler-util.h @@ -34,6 +34,8 @@ void tumbler_util_dump_strv (const gchar *log_domain, const gchar *label, const gchar *const *strv); +void tumbler_util_toggle_stderr (const gchar *log_domain); + gchar **tumbler_util_get_supported_uri_schemes (void) G_GNUC_MALLOC; GKeyFile *tumbler_util_get_settings (void) G_GNUC_MALLOC; |