perf tools: Use kmod_path__parse in decompress_kmodule

Replacing the file name parsing with kmod_path__parse.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-zpyyitlte7lwe2ywi51rj4n5@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Jiri Olsa 2015-02-12 22:27:50 +01:00 committed by Arnaldo Carvalho de Melo
parent bb58a8a459
commit 914f85c4a2

View File

@ -579,32 +579,34 @@ static int dso__swap_init(struct dso *dso, unsigned char eidata)
static int decompress_kmodule(struct dso *dso, const char *name, static int decompress_kmodule(struct dso *dso, const char *name,
enum dso_binary_type type) enum dso_binary_type type)
{ {
int fd; int fd = -1;
const char *ext = strrchr(name, '.');
char tmpbuf[] = "/tmp/perf-kmod-XXXXXX"; char tmpbuf[] = "/tmp/perf-kmod-XXXXXX";
struct kmod_path m;
if (type != DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP && if (type != DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP &&
type != DSO_BINARY_TYPE__GUEST_KMODULE_COMP && type != DSO_BINARY_TYPE__GUEST_KMODULE_COMP &&
type != DSO_BINARY_TYPE__BUILD_ID_CACHE) type != DSO_BINARY_TYPE__BUILD_ID_CACHE)
return -1; return -1;
if (!ext || !is_supported_compression(ext + 1)) { if (type == DSO_BINARY_TYPE__BUILD_ID_CACHE)
ext = strrchr(dso->name, '.'); name = dso->long_name;
if (!ext || !is_supported_compression(ext + 1))
return -1; if (kmod_path__parse_ext(&m, name) || !m.comp)
} return -1;
fd = mkstemp(tmpbuf); fd = mkstemp(tmpbuf);
if (fd < 0) if (fd < 0)
return -1; goto out;
if (!decompress_to_file(ext + 1, name, fd)) { if (!decompress_to_file(m.ext, name, fd)) {
close(fd); close(fd);
fd = -1; fd = -1;
} }
unlink(tmpbuf); unlink(tmpbuf);
out:
free(m.ext);
return fd; return fd;
} }