diff options
author | WaLyong Cho <walyong.cho@samsung.com> | 2014-11-12 19:49:32 +0900 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-12-04 02:10:41 +0100 |
commit | 3f18c60b2e09d1191ffede3aeabd967b57a1f918 (patch) | |
tree | 30df002fdc0908302a33c6a4d2102c9dffa54e32 /src/bootchart/svg.c | |
parent | fec8457652002fd5bff923042a7407b3810f5a7f (diff) |
bootchart: escape non printable process name
Diffstat (limited to 'src/bootchart/svg.c')
-rw-r--r-- | src/bootchart/svg.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/bootchart/svg.c b/src/bootchart/svg.c index faf377e506..e5569e1622 100644 --- a/src/bootchart/svg.c +++ b/src/bootchart/svg.c @@ -39,6 +39,7 @@ #include "svg.h" #include "bootchart.h" #include "list.h" +#include "utf8.h" #define time_to_graph(t) ((t) * arg_scale_x) #define ps_to_graph(n) ((n) * arg_scale_y) @@ -1006,12 +1007,15 @@ static void svg_ps_bars(void) { /* pass 2 - ps boxes */ ps = ps_first; while ((ps = get_next_ps(ps))) { - _cleanup_free_ char *enc_name = NULL; + _cleanup_free_ char *enc_name = NULL, *escaped = NULL; double endtime; double starttime; int t; - enc_name = xml_comment_encode(ps->name); + if (!utf8_is_printable(ps->name, strlen(ps->name))) + escaped = utf8_escape_non_printable(ps->name); + + enc_name = xml_comment_encode(escaped ? escaped : ps->name); if (!enc_name) continue; @@ -1100,7 +1104,7 @@ static void svg_ps_bars(void) { svg(" <text x=\"%.03f\" y=\"%.03f\"><![CDATA[%s]]> [%i]<tspan class=\"run\">%.03fs</tspan> %s</text>\n", time_to_graph(w - graph_start) + 5.0, ps_to_graph(j) + 14.0, - ps->name, + escaped ? escaped : ps->name, ps->pid, (ps->last->runtime - ps->first->runtime) / 1000000000.0, arg_show_cgroup ? ps->cgroup : ""); |