-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
perf tools: Add kmod_path__parse function
Provides united way of parsing kernel module path into several components. The new kmod_path__parse function and few defines: int __kmod_path__parse(struct kmod_path *m, const char *path, bool alloc_name, bool alloc_ext); #define kmod_path__parse(__m, __p) __kmod_path__parse(__m, __p, false, false) #define kmod_path__parse_name(__m, __p) __kmod_path__parse(__m, __p, true , false) #define kmod_path__parse_ext(__m, __p) __kmod_path__parse(__m, __p, false, true) parse kernel module @path and updates @m argument like: @comp - true if @path contains supported compression suffix, false otherwise @kmod - true if @path contains '.ko' suffix in right position, false otherwise @name - if (@alloc_name && @kmod) is true, it contains strdup-ed base name of the kernel module without suffixes, otherwise strudup-ed base name of @path @ext - if (@alloc_ext && @comp) is true, it contains strdup-ed string the compression suffix It returns 0 if there's no strdup error, -ENOMEM otherwise. 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-9t6eqg8j610r94l743hkntiv@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
- Loading branch information
Jiri Olsa
authored and
Arnaldo Carvalho de Melo
committed
Mar 21, 2015
1 parent
80a32e5
commit 3c8a67f
Showing
6 changed files
with
159 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
#include <stdbool.h> | ||
#include "tests.h" | ||
#include "dso.h" | ||
#include "debug.h" | ||
|
||
static int test(const char *path, bool alloc_name, bool alloc_ext, | ||
bool kmod, bool comp, const char *name, const char *ext) | ||
{ | ||
struct kmod_path m; | ||
|
||
memset(&m, 0x0, sizeof(m)); | ||
|
||
TEST_ASSERT_VAL("kmod_path__parse", | ||
!__kmod_path__parse(&m, path, alloc_name, alloc_ext)); | ||
|
||
pr_debug("%s - alloc name %d, alloc ext %d, kmod %d, comp %d, name '%s', ext '%s'\n", | ||
path, alloc_name, alloc_ext, m.kmod, m.comp, m.name, m.ext); | ||
|
||
TEST_ASSERT_VAL("wrong kmod", m.kmod == kmod); | ||
TEST_ASSERT_VAL("wrong comp", m.comp == comp); | ||
|
||
if (ext) | ||
TEST_ASSERT_VAL("wrong ext", m.ext && !strcmp(ext, m.ext)); | ||
else | ||
TEST_ASSERT_VAL("wrong ext", !m.ext); | ||
|
||
if (name) | ||
TEST_ASSERT_VAL("wrong name", m.name && !strcmp(name, m.name)); | ||
else | ||
TEST_ASSERT_VAL("wrong name", !m.name); | ||
|
||
free(m.name); | ||
free(m.ext); | ||
return 0; | ||
} | ||
|
||
#define T(path, an, ae, k, c, n, e) \ | ||
TEST_ASSERT_VAL("failed", !test(path, an, ae, k, c, n, e)) | ||
|
||
int test__kmod_path__parse(void) | ||
{ | ||
/* path alloc_name alloc_ext kmod comp name ext */ | ||
T("/xxxx/xxxx/x-x.ko", true , true , true, false, "[x_x]", NULL); | ||
T("/xxxx/xxxx/x-x.ko", false , true , true, false, NULL , NULL); | ||
T("/xxxx/xxxx/x-x.ko", true , false , true, false, "[x_x]", NULL); | ||
T("/xxxx/xxxx/x-x.ko", false , false , true, false, NULL , NULL); | ||
|
||
/* path alloc_name alloc_ext kmod comp name ext */ | ||
T("/xxxx/xxxx/x.ko.gz", true , true , true, true, "[x]", "gz"); | ||
T("/xxxx/xxxx/x.ko.gz", false , true , true, true, NULL , "gz"); | ||
T("/xxxx/xxxx/x.ko.gz", true , false , true, true, "[x]", NULL); | ||
T("/xxxx/xxxx/x.ko.gz", false , false , true, true, NULL , NULL); | ||
|
||
/* path alloc_name alloc_ext kmod comp name ext */ | ||
T("/xxxx/xxxx/x.gz", true , true , false, true, "x.gz" ,"gz"); | ||
T("/xxxx/xxxx/x.gz", false , true , false, true, NULL ,"gz"); | ||
T("/xxxx/xxxx/x.gz", true , false , false, true, "x.gz" , NULL); | ||
T("/xxxx/xxxx/x.gz", false , false , false, true, NULL , NULL); | ||
|
||
/* path alloc_name alloc_ext kmod comp name ext */ | ||
T("x.gz", true , true , false, true, "x.gz", "gz"); | ||
T("x.gz", false , true , false, true, NULL , "gz"); | ||
T("x.gz", true , false , false, true, "x.gz", NULL); | ||
T("x.gz", false , false , false, true, NULL , NULL); | ||
|
||
/* path alloc_name alloc_ext kmod comp name ext */ | ||
T("x.ko.gz", true , true , true, true, "[x]", "gz"); | ||
T("x.ko.gz", false , true , true, true, NULL , "gz"); | ||
T("x.ko.gz", true , false , true, true, "[x]", NULL); | ||
T("x.ko.gz", false , false , true, true, NULL , NULL); | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters