[pulseaudio-discuss] [PATCH 2/2] cli: add commands to manipulate categories
Deng Zhengrong
dzrongg at gmail.com
Wed Jun 6 13:17:40 PDT 2012
---
src/pulsecore/cli-command.c | 58 +++++++++++++++++++++++++++++++++++++++++++
src/pulsecore/log.c | 16 ++++++++++++
src/pulsecore/log.h | 2 +
3 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index 0f7b634..bc20620 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -130,6 +130,8 @@ static int pa_cli_command_log_level(pa_core *c, pa_tokenizer *t, pa_strbuf *buf,
static int pa_cli_command_log_meta(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
static int pa_cli_command_log_time(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
static int pa_cli_command_log_backtrace(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
+static int pa_cli_command_hide_category(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
+static int pa_cli_command_set_category_level(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
static int pa_cli_command_update_sink_proplist(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
static int pa_cli_command_update_source_proplist(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
static int pa_cli_command_update_sink_input_proplist(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail);
@@ -193,6 +195,8 @@ static const struct command commands[] = {
{ "set-log-meta", pa_cli_command_log_meta, "Show source code location in log messages (args: bool)", 2},
{ "set-log-time", pa_cli_command_log_time, "Show timestamps in log messages (args: bool)", 2},
{ "set-log-backtrace", pa_cli_command_log_backtrace, "Show backtrace in log messages (args: frames)", 2},
+ { "hide-category", pa_cli_command_hide_category, "Hide all the logs from the corresponding category (args: category)", 2},
+ { "set-category-level", pa_cli_command_set_category_level, "Change the category's log level (args: category level)", 3},
{ "play-file", pa_cli_command_play_file, "Play a sound file (args: filename, sink|index)", 3},
{ "dump", pa_cli_command_dump, "Dump daemon configuration", 1},
{ "dump-volumes", pa_cli_command_dump_volumes, "Debug: Show the state of all volumes", 1 },
@@ -1629,6 +1633,60 @@ static int pa_cli_command_log_backtrace(pa_core *c, pa_tokenizer *t, pa_strbuf *
return 0;
}
+static int pa_cli_command_hide_category(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) {
+ const char *category_name;
+
+ pa_core_assert_ref(c);
+ pa_assert(t);
+ pa_assert(buf);
+ pa_assert(fail);
+
+ if (!(category_name = pa_tokenizer_get(t, 1))) {
+ pa_strbuf_puts(buf, "You need to specify a category name.\n");
+ return -1;
+ }
+
+ if (!pa_log_category_set_level(category_name, (pa_log_level_t) 0)) {
+ pa_strbuf_puts(buf, "Failed to set the corresponding level.\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int pa_cli_command_set_category_level(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) {
+ const char *category_name;
+ const char *level_string;
+ pa_log_level_t level;
+
+ pa_core_assert_ref(c);
+ pa_assert(t);
+ pa_assert(buf);
+ pa_assert(fail);
+
+ if (!(category_name = pa_tokenizer_get(t, 1))) {
+ pa_strbuf_puts(buf, "You need to specify a category name.\n");
+ return -1;
+ }
+
+ if (!(level_string = pa_tokenizer_get(t, 2))) {
+ pa_strbuf_puts(buf, "You need to specify the level for the category.\n");
+ return -1;
+ }
+
+ if (pa_atou(level_string, &level) < 0 || level >= PA_LOG_LEVEL_MAX) {
+ pa_strbuf_puts(buf, "Failed to parse log level.\n");
+ return -1;
+ }
+
+ if (!pa_log_category_set_level(category_name, level)) {
+ pa_strbuf_puts(buf, "Failed to set the corresponding level.\n");
+ return -1;
+ }
+
+ return 0;
+}
+
static int pa_cli_command_card_profile(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) {
const char *n, *p;
pa_card *card;
diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c
index 86df681..637287f 100644
--- a/src/pulsecore/log.c
+++ b/src/pulsecore/log.c
@@ -542,3 +542,19 @@ pa_bool_t pa_log_ratelimit(pa_log_level_t level) {
return pa_ratelimit_test(&ratelimit, level);
}
+
+pa_bool_t pa_log_category_set_level(const char *name, pa_log_level_t level) {
+ pa_log_category_t *category;
+
+ if (level >= PA_LOG_LEVEL_MAX)
+ return FALSE;
+
+ if (!(category = pa_log_category_get(name)))
+ return FALSE;
+
+ pa_mutex_lock(categories_mutex);
+ category->threshold = level;
+ pa_mutex_unlock(categories_mutex);
+
+ return TRUE;
+}
diff --git a/src/pulsecore/log.h b/src/pulsecore/log.h
index d5432e6..a53130e 100644
--- a/src/pulsecore/log.h
+++ b/src/pulsecore/log.h
@@ -151,4 +151,6 @@ LOG_FUNC(error, PA_LOG_ERROR)
pa_bool_t pa_log_ratelimit(pa_log_level_t level);
+pa_bool_t pa_log_category_set_level(const char *name, pa_log_level_t level);
+
#endif
--
1.7.7.6
More information about the pulseaudio-discuss
mailing list