perf tools: Fix snprint warnings for gcc 8
authorJiri Olsa <jolsa@kernel.org>
Mon, 19 Mar 2018 08:29:01 +0000 (09:29 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Tue, 20 Nov 2018 18:06:05 +0000 (18:06 +0000)
commit 77f18153c080855e1c3fb520ca31a4e61530121d upstream.

With gcc 8 we get new set of snprintf() warnings that breaks the
compilation, one example:

  tests/mem.c: In function ‘check’:
  tests/mem.c:19:48: error: ‘%s’ directive output may be truncated writing \
        up to 99 bytes into a region of size 89 [-Werror=format-truncation=]
    snprintf(failure, sizeof failure, "unexpected %s", out);

The gcc docs says:

 To avoid the warning either use a bigger buffer or handle the
 function's return value which indicates whether or not its output
 has been truncated.

Given that all these warnings are harmless, because the code either
properly fails due to uncomplete file path or we don't care for
truncated output at all, I'm changing all those snprintf() calls to
scnprintf(), which actually 'checks' for the snprint return value so the
gcc stays silent.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Link: http://lkml.kernel.org/r/20180319082902.4518-1-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[bwh: Backported to 3.16: Drop changes in tools/perf/tests/mem.c]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
tools/perf/builtin-script.c
tools/perf/tests/attr.c
tools/perf/tests/pmu.c
tools/perf/util/cgroup.c
tools/perf/util/parse-events.c
tools/perf/util/pmu.c

index cd1063af1325c2acf91014be1daabde435d7cf7f..d2c8756589fe24b11ea549e13c5e03a85269ecdd 100644 (file)
@@ -1235,8 +1235,8 @@ static int list_available_scripts(const struct option *opt __maybe_unused,
                return -1;
 
        for_each_lang(scripts_path, scripts_dir, lang_dirent) {
-               snprintf(lang_path, MAXPATHLEN, "%s/%s/bin", scripts_path,
-                        lang_dirent->d_name);
+               scnprintf(lang_path, MAXPATHLEN, "%s/%s/bin", scripts_path,
+                         lang_dirent->d_name);
                lang_dir = opendir(lang_path);
                if (!lang_dir)
                        continue;
@@ -1245,8 +1245,8 @@ static int list_available_scripts(const struct option *opt __maybe_unused,
                        script_root = get_script_root(script_dirent, REPORT_SUFFIX);
                        if (script_root) {
                                desc = script_desc__findnew(script_root);
-                               snprintf(script_path, MAXPATHLEN, "%s/%s",
-                                        lang_path, script_dirent->d_name);
+                               scnprintf(script_path, MAXPATHLEN, "%s/%s",
+                                         lang_path, script_dirent->d_name);
                                read_script_info(desc, script_path);
                                free(script_root);
                        }
@@ -1282,7 +1282,7 @@ static int check_ev_match(char *dir_name, char *scriptname,
        int match, len;
        FILE *fp;
 
-       sprintf(filename, "%s/bin/%s-record", dir_name, scriptname);
+       scnprintf(filename, MAXPATHLEN, "%s/bin/%s-record", dir_name, scriptname);
 
        fp = fopen(filename, "r");
        if (!fp)
@@ -1358,8 +1358,8 @@ int find_scripts(char **scripts_array, char **scripts_path_array)
        }
 
        for_each_lang(scripts_path, scripts_dir, lang_dirent) {
-               snprintf(lang_path, MAXPATHLEN, "%s/%s", scripts_path,
-                        lang_dirent->d_name);
+               scnprintf(lang_path, MAXPATHLEN, "%s/%s", scripts_path,
+                         lang_dirent->d_name);
 #ifdef NO_LIBPERL
                if (strstr(lang_path, "perl"))
                        continue;
@@ -1414,8 +1414,8 @@ static char *get_script_path(const char *script_root, const char *suffix)
                return NULL;
 
        for_each_lang(scripts_path, scripts_dir, lang_dirent) {
-               snprintf(lang_path, MAXPATHLEN, "%s/%s/bin", scripts_path,
-                        lang_dirent->d_name);
+               scnprintf(lang_path, MAXPATHLEN, "%s/%s/bin", scripts_path,
+                         lang_dirent->d_name);
                lang_dir = opendir(lang_path);
                if (!lang_dir)
                        continue;
@@ -1426,8 +1426,8 @@ static char *get_script_path(const char *script_root, const char *suffix)
                                free(__script_root);
                                closedir(lang_dir);
                                closedir(scripts_dir);
-                               snprintf(script_path, MAXPATHLEN, "%s/%s",
-                                        lang_path, script_dirent->d_name);
+                               scnprintf(script_path, MAXPATHLEN, "%s/%s",
+                                         lang_path, script_dirent->d_name);
                                return strdup(script_path);
                        }
                        free(__script_root);
index 2dfc9ad0e6f2487d730008fac56988f9b408666d..497ab571997b91b992014c4e8c4484bdd96ad5e5 100644 (file)
@@ -147,8 +147,8 @@ static int run_dir(const char *d, const char *perf)
        if (verbose)
                vcnt++;
 
-       snprintf(cmd, 3*PATH_MAX, PYTHON " %s/attr.py -d %s/attr/ -p %s %.*s",
-                d, d, perf, vcnt, v);
+       scnprintf(cmd, 3*PATH_MAX, PYTHON " %s/attr.py -d %s/attr/ -p %s %.*s",
+                 d, d, perf, vcnt, v);
 
        return system(cmd);
 }
index 12b322fa34753b9d463762276dc7ec4e9b0c909a..567c1e29b7d6a542b49b2cb48a8ad2d9252e6e86 100644 (file)
@@ -95,7 +95,7 @@ static char *test_format_dir_get(void)
                struct test_format *format = &test_formats[i];
                FILE *file;
 
-               snprintf(name, PATH_MAX, "%s/%s", dir, format->name);
+               scnprintf(name, PATH_MAX, "%s/%s", dir, format->name);
 
                file = fopen(name, "w");
                if (!file)
index 88f7be3994321f8ef717262909ac6c38853fc691..61db98050d1a73f4ba76341b6651e056bb49cf63 100644 (file)
@@ -64,7 +64,7 @@ static int open_cgroup(char *name)
        if (cgroupfs_find_mountpoint(mnt, PATH_MAX + 1))
                return -1;
 
-       snprintf(path, PATH_MAX, "%s/%s", mnt, name);
+       scnprintf(path, PATH_MAX, "%s/%s", mnt, name);
 
        fd = open(path, O_RDONLY);
        if (fd == -1)
index d4eb50acf304148b625e39a464ee2b7e0c9fe771..a9d48aa70afc09950a0317635fe034f9ba8e3d89 100644 (file)
@@ -182,8 +182,8 @@ struct tracepoint_path *tracepoint_id_to_path(u64 config)
 
                for_each_event(sys_dirent, evt_dir, evt_dirent) {
 
-                       snprintf(evt_path, MAXPATHLEN, "%s/%s/id", dir_path,
-                                evt_dirent->d_name);
+                       scnprintf(evt_path, MAXPATHLEN, "%s/%s/id", dir_path,
+                                 evt_dirent->d_name);
                        fd = open(evt_path, O_RDONLY);
                        if (fd < 0)
                                continue;
index 17bd6049feaf0705a1fd6a2058ae864017941d54..f819c23744f5447e1c3f7bea212e088943498832 100644 (file)
@@ -240,7 +240,7 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
                if (len > 6 && !strcmp(name + len - 6, ".scale"))
                        continue;
 
-               snprintf(path, PATH_MAX, "%s/%s", dir, name);
+               scnprintf(path, PATH_MAX, "%s/%s", dir, name);
 
                file = fopen(path, "r");
                if (!file) {