Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1453696 > unrolled thread

[PATCH v6 RESEND 0/7] perf config: Introduce default config key-value pairs arrays

Started byTaeung Song <treeze.taeung@gmail.com>
First post2016-08-02 11:30 +0200
Last post2016-08-09 06:50 +0200
Articles 6 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v6 RESEND 0/7] perf config: Introduce default config key-value pairs arrays Taeung Song <treeze.taeung@gmail.com> - 2016-08-02 11:30 +0200
    [PATCH v6 RESEND 1/7] perf config: Introduce default_config_section and default_config_item for default config key-value pairs Taeung Song <treeze.taeung@gmail.com> - 2016-08-02 11:30 +0200
    [PATCH v6 RESEND 6/7] perf config: Add default section and item arrays for 'annotate' config Taeung Song <treeze.taeung@gmail.com> - 2016-08-02 11:30 +0200
    [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color Taeung Song <treeze.taeung@gmail.com> - 2016-08-02 11:30 +0200
      Re: [PATCH v6 RESEND 4/7] perf config: Use combined  {fore,back}ground colors value instead of each two color Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-08-08 21:00 +0200
        Re: [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground  colors value instead of each two color Taeung Song <treeze.taeung@gmail.com> - 2016-08-09 06:50 +0200

#1453696 — [PATCH v6 RESEND 0/7] perf config: Introduce default config key-value pairs arrays

FromTaeung Song <treeze.taeung@gmail.com>
Date2016-08-02 11:30 +0200
Subject[PATCH v6 RESEND 0/7] perf config: Introduce default config key-value pairs arrays
Message-ID<s1Ebn-2xS-7@gated-at.bofh.it>
Hello, :)

When initializing default perf config values,
we currently use values of actual type(int, bool, char *, etc.).
But I suggest using default config key-value pairs arrays.

For example,
If there isn't user config value at ~/.perfconfig for 'annotate.use_offset' config variable,
default value for it is 'true' bool type value in perf like below.

At ui/browsers/annoate.c

static struct annotate_browser_opt {
       bool hide_src_code,
            use_offset,
	    jump_arrows,
	    show_linenr,
	    show_nr_jumps,
	    show_total_period;
} annotate_browser__opts = {
       .use_offset      = true,
       .jump_arrows     = true,
};

But if we use new config arrays that have all default config key-value pairs,
we could initialize default config values with them.

If we do, we can manage default perf config values at one spot (like util/config.c)
and It can be easy and simple to modify existing default config values or
add default values for new config item.

For example,
If we use new default config arrays and there isn't user config value for 'annoate.use_offset'
default value for it will be set as annotate_config_items[CONFIG_ANNOATE_USE_OFFSET].value.b
instead of actual boolean type value 'true'.

IMHO, I think it would needed to use new default config arrays
to manage default perf config values more effectively.
And this pathset contains patchs for only 'colors' and 'annoate' section
because waiting for other opinions.

If you review this patchset, I'd appreciate it :-)

Thanks,
Taeung

v6:
- rename 'fore_back_colors' to simple 'colors' of ui_browser_colorset (Namhyung)
- remove unnecssary whitespace changes of PATCH 4/7, 5/7 (Namhyung)
- make more general macro instead of making accessor macro for each config section (Namhyung)
- rebased on current acme/perf/core

v5:
- rebased on current acme/perf/core

v4:
- rename 'fb_ground' to 'fore_back_colors' (Namhyung)
- add struct default_config_section
- split first patch[PATCH 1/7] as two
- remove perf_default_config_init() at perf.c
- rebased on current acme/perf/core

v3:
- remove default config arrays for the rest sections except 'colors' and 'annotate'
- use combined {fore, back}ground colors instead of each two color
- introduce perf_default_config_init() that call all default_*_config_init()
  for each config section

v2:
- rename 'ui_browser__config_gcolors' to 'ui_browser__config_colors' (Arnaldo)
- change 'ground colors' to '{back, fore}ground colors' (Arnaldo)
- use strtok + ltrim instead of strchr and while (isspace(*++bg)); (Arnaldo)

Taeung Song (7):
  perf config: Introduce default_config_section and default_config_item
    for default config key-value pairs
  perf config: Add macros assigning key-value pairs to
    default_config_item
  perf config: Add default section and item arrays for 'colors' config
  perf config: Use combined {fore,back}ground colors value instead of
    each two color
  perf config: Initialize ui_browser__colorsets with default config
    items
  perf config: Add default section and item arrays for 'annotate' config
  perf config: Initialize annotate_browser__opts with default config
    items

 tools/perf/ui/browser.c           | 64 +++++++++++++++++--------------
 tools/perf/ui/browsers/annotate.c | 16 ++++++--
 tools/perf/util/config.c          | 26 +++++++++++++
 tools/perf/util/config.h          | 80 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 154 insertions(+), 32 deletions(-)

-- 
2.5.0

[toc] | [next] | [standalone]


#1453697 — [PATCH v6 RESEND 1/7] perf config: Introduce default_config_section and default_config_item for default config key-value pairs

FromTaeung Song <treeze.taeung@gmail.com>
Date2016-08-02 11:30 +0200
Subject[PATCH v6 RESEND 1/7] perf config: Introduce default_config_section and default_config_item for default config key-value pairs
Message-ID<s1Ebo-2xS-25@gated-at.bofh.it>
In reply to#1453696
When initializing default perf config values,
we currently use values of actual type(int, bool, char *, etc.).

For example,
If there isn't user config value at ~/.perfconfig
for 'annotate.use_offset' config variable,
default value for it is 'true' bool type value in perf like below.

At ui/browsers/annoate.c

static struct annotate_browser_opt {
        bool hide_src_code,
             use_offset,
             jump_arrows,
             show_linenr,
             show_nr_jumps,
             show_total_period;
} annotate_browser__opts = {
        .use_offset      = true,
        .jump_arrows     = true,
};

But I suggest using 'struct default_config_section' and
'struct default_config_item' that can contain default config key-value pairs
in order to initialize default config values with them, in near future.

If we do, we could manage default perf config values at one spot (i.e. util/config.c)
with default config arrays and it could be easy and simple to modify
existing default config values or add default values for new config item.

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/util/config.h | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index 6f813d4..1fd8e4c 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -63,4 +63,33 @@ void perf_config__refresh(void);
 	perf_config_sections__for_each_entry(&set->sections, section)		\
 	perf_config_items__for_each_entry(&section->items, item)
 
+enum perf_config_type {
+	CONFIG_TYPE_BOOL,
+	CONFIG_TYPE_INT,
+	CONFIG_TYPE_LONG,
+	CONFIG_TYPE_U64,
+	CONFIG_TYPE_FLOAT,
+	CONFIG_TYPE_DOUBLE,
+	CONFIG_TYPE_STRING
+};
+
+struct default_config_item {
+	const char *name;
+	union {
+		bool b;
+		int i;
+		u32 l;
+		u64 ll;
+		float f;
+		double d;
+		const char *s;
+	} value;
+	enum perf_config_type type;
+};
+
+struct default_config_section {
+	const char *name;
+	const struct default_config_item *items;
+};
+
 #endif /* __PERF_CONFIG_H */
-- 
2.5.0

[toc] | [prev] | [next] | [standalone]


#1453698 — [PATCH v6 RESEND 6/7] perf config: Add default section and item arrays for 'annotate' config

FromTaeung Song <treeze.taeung@gmail.com>
Date2016-08-02 11:30 +0200
Subject[PATCH v6 RESEND 6/7] perf config: Add default section and item arrays for 'annotate' config
Message-ID<s1Ebo-2xS-27@gated-at.bofh.it>
In reply to#1453696
Actual variable for configs of 'annotate' section is like below.

(at ui/browsers/annoate.c)
static struct annotate_browser_opt {
        bool hide_src_code,
             use_offset,
             jump_arrows,
             show_linenr,
             show_nr_jumps,
             show_total_period;
} annotate_browser__opts = {
        .use_offset      = true,
        .jump_arrows     = true,
};

But I suggest using default config arrays for 'annotate' section that
contain all default config key-value pairs for it.

In near future, this arrays will be used on ui/browsers/annoate.c
because of setting default values of actual variables for 'annotate' config.

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/util/config.c | 11 +++++++++++
 tools/perf/util/config.h | 11 +++++++++++
 2 files changed, 22 insertions(+)

diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index a0c0170..d8d5415 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -41,8 +41,19 @@ const struct default_config_item colors_config_items[] = {
 	CONF_END()
 };
 
+const struct default_config_item annotate_config_items[] = {
+	CONF_BOOL_VAR("hide_src_code", false),
+	CONF_BOOL_VAR("use_offset", true),
+	CONF_BOOL_VAR("jump_arrows", true),
+	CONF_BOOL_VAR("show_nr_jumps", false),
+	CONF_BOOL_VAR("show_linenr", false),
+	CONF_BOOL_VAR("show_total_period", false),
+	CONF_END()
+};
+
 const struct default_config_section default_sections[] = {
 	{ .name = "colors", .items = colors_config_items },
+	{ .name = "annotate", .items = annotate_config_items },
 };
 
 static int get_next_char(void)
diff --git a/tools/perf/util/config.h b/tools/perf/util/config.h
index b9190fe..2fcfd51 100644
--- a/tools/perf/util/config.h
+++ b/tools/perf/util/config.h
@@ -75,6 +75,7 @@ enum perf_config_type {
 
 enum config_section_idx {
 	CONFIG_COLORS,
+	CONFIG_ANNOTATE,
 };
 
 enum colors_config_items_idx {
@@ -87,6 +88,15 @@ enum colors_config_items_idx {
 	CONFIG_COLORS_ROOT,
 };
 
+enum annotate_config_items_idx {
+	CONFIG_ANNOTATE_HIDE_SRC_CODE,
+	CONFIG_ANNOTATE_USE_OFFSET,
+	CONFIG_ANNOTATE_JUMP_ARROWS,
+	CONFIG_ANNOTATE_SHOW_NR_JUMPS,
+	CONFIG_ANNOTATE_SHOW_LINENR,
+	CONFIG_ANNOTATE_SHOW_TOTAL_PERIOD,
+};
+
 struct default_config_item {
 	const char *name;
 	union {
@@ -128,5 +138,6 @@ struct default_config_section {
 
 extern const struct default_config_section default_sections[];
 extern const struct default_config_item colors_config_items[];
+extern const struct default_config_item annotate_config_items[];
 
 #endif /* __PERF_CONFIG_H */
-- 
2.5.0

[toc] | [prev] | [next] | [standalone]


#1453699 — [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color

FromTaeung Song <treeze.taeung@gmail.com>
Date2016-08-02 11:30 +0200
Subject[PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color
Message-ID<s1Ebo-2xS-31@gated-at.bofh.it>
In reply to#1453696
To easily set default config values into actual variables for 'colors' config,
it would be better that actual variables for each 'colors' config
also have only one value like 'default_config_item' type.

If we use combined {fore,back}ground colors values in ui_browser_colorset,
it smoothly work to initialize default config values for 'colors' config
by 'colors_config_items' array that contains default values for it at util/config.c.
because both actual variable and config item of 'colors_config_items'
are equal in the number of values (as just one).

Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
 tools/perf/ui/browser.c | 53 +++++++++++++++++++++++--------------------------
 1 file changed, 25 insertions(+), 28 deletions(-)

diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
index 3eb3edb..31e2028 100644
--- a/tools/perf/ui/browser.c
+++ b/tools/perf/ui/browser.c
@@ -503,61 +503,53 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *browser)
 }
 
 static struct ui_browser_colorset {
-	const char *name, *fg, *bg;
+	const char *name, *colors;
 	int colorset;
 } ui_browser__colorsets[] = {
 	{
 		.colorset = HE_COLORSET_TOP,
 		.name	  = "top",
-		.fg	  = "red",
-		.bg	  = "default",
+		.colors	  = "red, default",
 	},
 	{
 		.colorset = HE_COLORSET_MEDIUM,
 		.name	  = "medium",
-		.fg	  = "green",
-		.bg	  = "default",
+		.colors	  = "green, default",
 	},
 	{
 		.colorset = HE_COLORSET_NORMAL,
 		.name	  = "normal",
-		.fg	  = "default",
-		.bg	  = "default",
+		.colors	  = "default, default",
 	},
 	{
 		.colorset = HE_COLORSET_SELECTED,
 		.name	  = "selected",
-		.fg	  = "black",
-		.bg	  = "yellow",
+		.colors	  = "black, yellow",
 	},
 	{
 		.colorset = HE_COLORSET_JUMP_ARROWS,
 		.name	  = "jump_arrows",
-		.fg	  = "blue",
-		.bg	  = "default",
+		.colors	  = "blue, default",
 	},
 	{
 		.colorset = HE_COLORSET_ADDR,
 		.name	  = "addr",
-		.fg	  = "magenta",
-		.bg	  = "default",
+		.colors	  = "magenta, default",
 	},
 	{
 		.colorset = HE_COLORSET_ROOT,
 		.name	  = "root",
-		.fg	  = "white",
-		.bg	  = "blue",
+		.colors	  = "white, blue",
 	},
 	{
 		.name = NULL,
 	}
 };
 
-
 static int ui_browser__color_config(const char *var, const char *value,
 				    void *data __maybe_unused)
 {
-	char *fg = NULL, *bg;
+	char *colors;
 	int i;
 
 	/* same dir for all commands */
@@ -570,22 +562,18 @@ static int ui_browser__color_config(const char *var, const char *value,
 		if (strcmp(ui_browser__colorsets[i].name, name) != 0)
 			continue;
 
-		fg = strdup(value);
-		if (fg == NULL)
-			break;
+		if (strstr(value, ",") == NULL)
+			return -1;
 
-		bg = strchr(fg, ',');
-		if (bg == NULL)
+		colors = strdup(value);
+		if (colors == NULL)
 			break;
+		ui_browser__colorsets[i].colors = colors;
 
-		*bg = '\0';
-		while (isspace(*++bg));
-		ui_browser__colorsets[i].bg = bg;
-		ui_browser__colorsets[i].fg = fg;
 		return 0;
 	}
 
-	free(fg);
+	free(colors);
 	return -1;
 }
 
@@ -743,8 +731,17 @@ void ui_browser__init(void)
 	perf_config(ui_browser__color_config, NULL);
 
 	while (ui_browser__colorsets[i].name) {
+		char *colors, *fg, *bg;
 		struct ui_browser_colorset *c = &ui_browser__colorsets[i++];
-		sltt_set_color(c->colorset, c->name, c->fg, c->bg);
+
+		colors = strdup(c->colors);
+		if (fg == NULL)
+			break;
+		fg = strtok(colors, ",");
+		bg = strtok(NULL, ",");
+		bg = ltrim(bg);
+		sltt_set_color(c->colorset, c->name, fg, bg);
+		free(colors);
 	}
 
 	annotate_browser__init();
-- 
2.5.0

[toc] | [prev] | [next] | [standalone]


#1457991 — Re: [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-08-08 21:00 +0200
SubjectRe: [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color
Message-ID<s3XWh-55N-5@gated-at.bofh.it>
In reply to#1453699
Em Tue, Aug 02, 2016 at 06:20:46PM +0900, Taeung Song escreveu:
> To easily set default config values into actual variables for 'colors' config,
> it would be better that actual variables for each 'colors' config
> also have only one value like 'default_config_item' type.
> 
> If we use combined {fore,back}ground colors values in ui_browser_colorset,
> it smoothly work to initialize default config values for 'colors' config
> by 'colors_config_items' array that contains default values for it at util/config.c.
> because both actual variable and config item of 'colors_config_items'
> are equal in the number of values (as just one).
> 
> Cc: Namhyung Kim <namhyung@kernel.org>
> Cc: Jiri Olsa <jolsa@kernel.org>
> Cc: Masami Hiramatsu <mhiramat@kernel.org>
> Cc: Wang Nan <wangnan0@huawei.com>
> Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
> ---
>  tools/perf/ui/browser.c | 53 +++++++++++++++++++++++--------------------------
>  1 file changed, 25 insertions(+), 28 deletions(-)
> 
> diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
> index 3eb3edb..31e2028 100644
> --- a/tools/perf/ui/browser.c
> +++ b/tools/perf/ui/browser.c
> @@ -503,61 +503,53 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *browser)
>  }
>  
>  static struct ui_browser_colorset {
> -	const char *name, *fg, *bg;
> +	const char *name, *colors;
>  	int colorset;
>  } ui_browser__colorsets[] = {
>  	{
>  		.colorset = HE_COLORSET_TOP,
>  		.name	  = "top",
> -		.fg	  = "red",
> -		.bg	  = "default",
> +		.colors	  = "red, default",
>  	},
>  	{
>  		.colorset = HE_COLORSET_MEDIUM,
>  		.name	  = "medium",
> -		.fg	  = "green",
> -		.bg	  = "default",
> +		.colors	  = "green, default",
>  	},
>  	{
>  		.colorset = HE_COLORSET_NORMAL,
>  		.name	  = "normal",
> -		.fg	  = "default",
> -		.bg	  = "default",
> +		.colors	  = "default, default",
>  	},
>  	{
>  		.colorset = HE_COLORSET_SELECTED,
>  		.name	  = "selected",
> -		.fg	  = "black",
> -		.bg	  = "yellow",
> +		.colors	  = "black, yellow",
>  	},
>  	{
>  		.colorset = HE_COLORSET_JUMP_ARROWS,
>  		.name	  = "jump_arrows",
> -		.fg	  = "blue",
> -		.bg	  = "default",
> +		.colors	  = "blue, default",
>  	},
>  	{
>  		.colorset = HE_COLORSET_ADDR,
>  		.name	  = "addr",
> -		.fg	  = "magenta",
> -		.bg	  = "default",
> +		.colors	  = "magenta, default",
>  	},
>  	{
>  		.colorset = HE_COLORSET_ROOT,
>  		.name	  = "root",
> -		.fg	  = "white",
> -		.bg	  = "blue",
> +		.colors	  = "white, blue",
>  	},
>  	{
>  		.name = NULL,
>  	}
>  };
>  
> -
>  static int ui_browser__color_config(const char *var, const char *value,
>  				    void *data __maybe_unused)
>  {
> -	char *fg = NULL, *bg;
> +	char *colors;
>  	int i;
>  
>  	/* same dir for all commands */
> @@ -570,22 +562,18 @@ static int ui_browser__color_config(const char *var, const char *value,
>  		if (strcmp(ui_browser__colorsets[i].name, name) != 0)
>  			continue;
>  
> -		fg = strdup(value);
> -		if (fg == NULL)
> -			break;
> +		if (strstr(value, ",") == NULL)
> +			return -1;
>  
> -		bg = strchr(fg, ',');
> -		if (bg == NULL)
> +		colors = strdup(value);
> +		if (colors == NULL)
>  			break;
> +		ui_browser__colorsets[i].colors = colors;
>  
> -		*bg = '\0';
> -		while (isspace(*++bg));
> -		ui_browser__colorsets[i].bg = bg;
> -		ui_browser__colorsets[i].fg = fg;
>  		return 0;
>  	}
>  
> -	free(fg);
> +	free(colors);
>  	return -1;
>  }
>  
> @@ -743,8 +731,17 @@ void ui_browser__init(void)
>  	perf_config(ui_browser__color_config, NULL);
>  
>  	while (ui_browser__colorsets[i].name) {
> +		char *colors, *fg, *bg;
>  		struct ui_browser_colorset *c = &ui_browser__colorsets[i++];
> -		sltt_set_color(c->colorset, c->name, c->fg, c->bg);
> +
> +		colors = strdup(c->colors);
> +		if (fg == NULL)

Huh? At this point fb is not even initialized

> +			break;
> +		fg = strtok(colors, ",");
> +		bg = strtok(NULL, ",");
> +		bg = ltrim(bg);
> +		sltt_set_color(c->colorset, c->name, fg, bg);
> +		free(colors);
>  	}
>  
>  	annotate_browser__init();
> -- 
> 2.5.0

[toc] | [prev] | [next] | [standalone]


#1458399 — Re: [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color

FromTaeung Song <treeze.taeung@gmail.com>
Date2016-08-09 06:50 +0200
SubjectRe: [PATCH v6 RESEND 4/7] perf config: Use combined {fore,back}ground colors value instead of each two color
Message-ID<s479g-2Kd-3@gated-at.bofh.it>
In reply to#1457991
Hi, Arnaldo :)

On 08/09/2016 03:58 AM, Arnaldo Carvalho de Melo wrote:
> Em Tue, Aug 02, 2016 at 06:20:46PM +0900, Taeung Song escreveu:
>> To easily set default config values into actual variables for 'colors' config,
>> it would be better that actual variables for each 'colors' config
>> also have only one value like 'default_config_item' type.
>>
>> If we use combined {fore,back}ground colors values in ui_browser_colorset,
>> it smoothly work to initialize default config values for 'colors' config
>> by 'colors_config_items' array that contains default values for it at util/config.c.
>> because both actual variable and config item of 'colors_config_items'
>> are equal in the number of values (as just one).
>>
>> Cc: Namhyung Kim <namhyung@kernel.org>
>> Cc: Jiri Olsa <jolsa@kernel.org>
>> Cc: Masami Hiramatsu <mhiramat@kernel.org>
>> Cc: Wang Nan <wangnan0@huawei.com>
>> Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
>> ---
>>  tools/perf/ui/browser.c | 53 +++++++++++++++++++++++--------------------------
>>  1 file changed, 25 insertions(+), 28 deletions(-)
>>
>> diff --git a/tools/perf/ui/browser.c b/tools/perf/ui/browser.c
>> index 3eb3edb..31e2028 100644
>> --- a/tools/perf/ui/browser.c
>> +++ b/tools/perf/ui/browser.c
>> @@ -503,61 +503,53 @@ unsigned int ui_browser__list_head_refresh(struct ui_browser *browser)
>>  }
>>
>>  static struct ui_browser_colorset {
>> -	const char *name, *fg, *bg;
>> +	const char *name, *colors;
>>  	int colorset;
>>  } ui_browser__colorsets[] = {
>>  	{
>>  		.colorset = HE_COLORSET_TOP,
>>  		.name	  = "top",
>> -		.fg	  = "red",
>> -		.bg	  = "default",
>> +		.colors	  = "red, default",
>>  	},
>>  	{
>>  		.colorset = HE_COLORSET_MEDIUM,
>>  		.name	  = "medium",
>> -		.fg	  = "green",
>> -		.bg	  = "default",
>> +		.colors	  = "green, default",
>>  	},
>>  	{
>>  		.colorset = HE_COLORSET_NORMAL,
>>  		.name	  = "normal",
>> -		.fg	  = "default",
>> -		.bg	  = "default",
>> +		.colors	  = "default, default",
>>  	},
>>  	{
>>  		.colorset = HE_COLORSET_SELECTED,
>>  		.name	  = "selected",
>> -		.fg	  = "black",
>> -		.bg	  = "yellow",
>> +		.colors	  = "black, yellow",
>>  	},
>>  	{
>>  		.colorset = HE_COLORSET_JUMP_ARROWS,
>>  		.name	  = "jump_arrows",
>> -		.fg	  = "blue",
>> -		.bg	  = "default",
>> +		.colors	  = "blue, default",
>>  	},
>>  	{
>>  		.colorset = HE_COLORSET_ADDR,
>>  		.name	  = "addr",
>> -		.fg	  = "magenta",
>> -		.bg	  = "default",
>> +		.colors	  = "magenta, default",
>>  	},
>>  	{
>>  		.colorset = HE_COLORSET_ROOT,
>>  		.name	  = "root",
>> -		.fg	  = "white",
>> -		.bg	  = "blue",
>> +		.colors	  = "white, blue",
>>  	},
>>  	{
>>  		.name = NULL,
>>  	}
>>  };
>>
>> -
>>  static int ui_browser__color_config(const char *var, const char *value,
>>  				    void *data __maybe_unused)
>>  {
>> -	char *fg = NULL, *bg;
>> +	char *colors;
>>  	int i;
>>
>>  	/* same dir for all commands */
>> @@ -570,22 +562,18 @@ static int ui_browser__color_config(const char *var, const char *value,
>>  		if (strcmp(ui_browser__colorsets[i].name, name) != 0)
>>  			continue;
>>
>> -		fg = strdup(value);
>> -		if (fg == NULL)
>> -			break;
>> +		if (strstr(value, ",") == NULL)
>> +			return -1;
>>
>> -		bg = strchr(fg, ',');
>> -		if (bg == NULL)
>> +		colors = strdup(value);
>> +		if (colors == NULL)
>>  			break;
>> +		ui_browser__colorsets[i].colors = colors;
>>
>> -		*bg = '\0';
>> -		while (isspace(*++bg));
>> -		ui_browser__colorsets[i].bg = bg;
>> -		ui_browser__colorsets[i].fg = fg;
>>  		return 0;
>>  	}
>>
>> -	free(fg);
>> +	free(colors);
>>  	return -1;
>>  }
>>
>> @@ -743,8 +731,17 @@ void ui_browser__init(void)
>>  	perf_config(ui_browser__color_config, NULL);
>>
>>  	while (ui_browser__colorsets[i].name) {
>> +		char *colors, *fg, *bg;
>>  		struct ui_browser_colorset *c = &ui_browser__colorsets[i++];
>> -		sltt_set_color(c->colorset, c->name, c->fg, c->bg);
>> +
>> +		colors = strdup(c->colors);
>> +		if (fg == NULL)
>
> Huh? At this point fb is not even initialized

Sorry for my mistake.
I'll change 'fg' to 'colors' to handle a exception
of strdup().

Thanks,
Taeung


>> +			break;
>> +		fg = strtok(colors, ",");
>> +		bg = strtok(NULL, ",");
>> +		bg = ltrim(bg);
>> +		sltt_set_color(c->colorset, c->name, fg, bg);
>> +		free(colors);
>>  	}
>>
>>  	annotate_browser__init();
>> --
>> 2.5.0

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web