Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf help: Make check_emacsclient_version to check strbuf APIs

Make check_emacsclient_version() to check the return value of strbuf
APIs so that it can handle errors in strbuf.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20160510054716.6158.11755.stgit@devbox
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Masami Hiramatsu and committed by
Arnaldo Carvalho de Melo
b72ca403 bf4d5f25

+10 -8
+10 -8
tools/perf/builtin-help.c
··· 61 61 struct child_process ec_process; 62 62 const char *argv_ec[] = { "emacsclient", "--version", NULL }; 63 63 int version; 64 + int ret = -1; 64 65 65 66 /* emacsclient prints its version number on stderr */ 66 67 memset(&ec_process, 0, sizeof(ec_process)); ··· 72 71 fprintf(stderr, "Failed to start emacsclient.\n"); 73 72 return -1; 74 73 } 75 - strbuf_read(&buffer, ec_process.err, 20); 74 + if (strbuf_read(&buffer, ec_process.err, 20) < 0) { 75 + fprintf(stderr, "Failed to read emacsclient version\n"); 76 + goto out; 77 + } 76 78 close(ec_process.err); 77 79 78 80 /* ··· 86 82 87 83 if (prefixcmp(buffer.buf, "emacsclient")) { 88 84 fprintf(stderr, "Failed to parse emacsclient version.\n"); 89 - strbuf_release(&buffer); 90 - return -1; 85 + goto out; 91 86 } 92 87 93 88 version = atoi(buffer.buf + strlen("emacsclient")); ··· 95 92 fprintf(stderr, 96 93 "emacsclient version '%d' too old (< 22).\n", 97 94 version); 98 - strbuf_release(&buffer); 99 - return -1; 100 - } 101 - 95 + } else 96 + ret = 0; 97 + out: 102 98 strbuf_release(&buffer); 103 - return 0; 99 + return ret; 104 100 } 105 101 106 102 static void exec_woman_emacs(const char *path, const char *page)