Skip to content

Commit

Permalink
tools include: Adopt strstarts() from the kernel
Browse files Browse the repository at this point in the history
Replacing prefixcmp(), same purpose, inverted result, so standardize on
the kernel variant, to reduce silly differences among tools/ and the
kernel sources, making it easier for people to work in both codebases.

And then doing:

	if (strstarts(option, "no-"))

Looks clearer than doing:

	if (!prefixcmp(option, "no-"))

To figure out if option starts witn "no-".

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-kaei42gi7lpa8subwtv7eug8@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Arnaldo Carvalho de Melo committed Jul 20, 2017
1 parent 082ab9a commit 8e99b6d
Show file tree
Hide file tree
Showing 15 changed files with 50 additions and 46 deletions.
12 changes: 10 additions & 2 deletions tools/include/linux/string.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#ifndef _TOOLS_LINUX_STRING_H_
#define _TOOLS_LINUX_STRING_H_


#include <linux/types.h> /* for size_t */
#include <string.h>

void *memdup(const void *src, size_t len);

Expand All @@ -18,6 +18,14 @@ extern size_t strlcpy(char *dest, const char *src, size_t size);

char *str_error_r(int errnum, char *buf, size_t buflen);

int prefixcmp(const char *str, const char *prefix);
/**
* strstarts - does @str start with @prefix?
* @str: string to examine
* @prefix: prefix to look for.
*/
static inline bool strstarts(const char *str, const char *prefix)
{
return strncmp(str, prefix, strlen(prefix)) == 0;
}

#endif /* _LINUX_STRING_H_ */
9 changes: 0 additions & 9 deletions tools/lib/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,3 @@ size_t __weak strlcpy(char *dest, const char *src, size_t size)
}
return ret;
}

int prefixcmp(const char *str, const char *prefix)
{
for (; ; str++, prefix++)
if (!*prefix)
return 0;
else if (*str != *prefix)
return (unsigned char)*prefix - (unsigned char)*str;
}
2 changes: 1 addition & 1 deletion tools/lib/subcmd/help.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ static void list_commands_in_dir(struct cmdnames *cmds,
while ((de = readdir(dir)) != NULL) {
int entlen;

if (prefixcmp(de->d_name, prefix))
if (!strstarts(de->d_name, prefix))
continue;

astrcat(&buf, de->d_name);
Expand Down
18 changes: 9 additions & 9 deletions tools/lib/subcmd/parse-options.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
return 0;
}
if (!rest) {
if (!prefixcmp(options->long_name, "no-")) {
if (strstarts(options->long_name, "no-")) {
/*
* The long name itself starts with "no-", so
* accept the option without "no-" so that users
Expand All @@ -381,7 +381,7 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
goto match;
}
/* Abbreviated case */
if (!prefixcmp(options->long_name + 3, arg)) {
if (strstarts(options->long_name + 3, arg)) {
flags |= OPT_UNSET;
goto is_abbreviated;
}
Expand All @@ -406,7 +406,7 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
continue;
}
/* negated and abbreviated very much? */
if (!prefixcmp("no-", arg)) {
if (strstarts("no-", arg)) {
flags |= OPT_UNSET;
goto is_abbreviated;
}
Expand All @@ -416,7 +416,7 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
flags |= OPT_UNSET;
rest = skip_prefix(arg + 3, options->long_name);
/* abbreviated and negated? */
if (!rest && !prefixcmp(options->long_name, arg + 3))
if (!rest && strstarts(options->long_name, arg + 3))
goto is_abbreviated;
if (!rest)
continue;
Expand Down Expand Up @@ -456,15 +456,15 @@ static void check_typos(const char *arg, const struct option *options)
if (strlen(arg) < 3)
return;

if (!prefixcmp(arg, "no-")) {
if (strstarts(arg, "no-")) {
fprintf(stderr, " Error: did you mean `--%s` (with two dashes ?)", arg);
exit(129);
}

for (; options->type != OPTION_END; options++) {
if (!options->long_name)
continue;
if (!prefixcmp(options->long_name, arg)) {
if (strstarts(options->long_name, arg)) {
fprintf(stderr, " Error: did you mean `--%s` (with two dashes ?)", arg);
exit(129);
}
Expand Down Expand Up @@ -933,10 +933,10 @@ int parse_options_usage(const char * const *usagestr,
if (opts->long_name == NULL)
continue;

if (!prefixcmp(opts->long_name, optstr))
if (strstarts(opts->long_name, optstr))
print_option_help(opts, 0);
if (!prefixcmp("no-", optstr) &&
!prefixcmp(opts->long_name, optstr + 3))
if (strstarts("no-", optstr) &&
strstarts(opts->long_name, optstr + 3))
print_option_help(opts, 0);
}

Expand Down
3 changes: 2 additions & 1 deletion tools/perf/builtin-config.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "util/util.h"
#include "util/debug.h"
#include "util/config.h"
#include <linux/string.h>

static bool use_system_config, use_user_config;

Expand Down Expand Up @@ -79,7 +80,7 @@ static int show_spec_config(struct perf_config_set *set, const char *var)
return -1;

perf_config_items__for_each_entry(&set->sections, section) {
if (prefixcmp(var, section->name) != 0)
if (!strstarts(var, section->name))
continue;

perf_config_items__for_each_entry(&section->items, item) {
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/builtin-ftrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ static int perf_ftrace_config(const char *var, const char *value, void *cb)
{
struct perf_ftrace *ftrace = cb;

if (prefixcmp(var, "ftrace."))
if (!strstarts(var, "ftrace."))
return 0;

if (strcmp(var, "ftrace.tracer"))
Expand Down
6 changes: 3 additions & 3 deletions tools/perf/builtin-help.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ static int check_emacsclient_version(void)
*/
finish_command(&ec_process);

if (prefixcmp(buffer.buf, "emacsclient")) {
if (!strstarts(buffer.buf, "emacsclient")) {
fprintf(stderr, "Failed to parse emacsclient version.\n");
goto out;
}
Expand Down Expand Up @@ -283,7 +283,7 @@ static int perf_help_config(const char *var, const char *value, void *cb)
add_man_viewer(value);
return 0;
}
if (!prefixcmp(var, "man."))
if (!strstarts(var, "man."))
return add_man_viewer_info(var, value);

return 0;
Expand Down Expand Up @@ -313,7 +313,7 @@ static const char *cmd_to_page(const char *perf_cmd)

if (!perf_cmd)
return "perf";
else if (!prefixcmp(perf_cmd, "perf"))
else if (!strstarts(perf_cmd, "perf"))
return perf_cmd;

return asprintf(&s, "perf-%s", perf_cmd) < 0 ? NULL : s;
Expand Down
16 changes: 8 additions & 8 deletions tools/perf/perf.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ struct pager_config {
static int pager_command_config(const char *var, const char *value, void *data)
{
struct pager_config *c = data;
if (!prefixcmp(var, "pager.") && !strcmp(var + 6, c->cmd))
if (strstarts(var, "pager.") && !strcmp(var + 6, c->cmd))
c->val = perf_config_bool(var, value);
return 0;
}
Expand All @@ -108,9 +108,9 @@ static int check_pager_config(const char *cmd)
static int browser_command_config(const char *var, const char *value, void *data)
{
struct pager_config *c = data;
if (!prefixcmp(var, "tui.") && !strcmp(var + 4, c->cmd))
if (strstarts(var, "tui.") && !strcmp(var + 4, c->cmd))
c->val = perf_config_bool(var, value);
if (!prefixcmp(var, "gtk.") && !strcmp(var + 4, c->cmd))
if (strstarts(var, "gtk.") && !strcmp(var + 4, c->cmd))
c->val = perf_config_bool(var, value) ? 2 : 0;
return 0;
}
Expand Down Expand Up @@ -192,7 +192,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
/*
* Check remaining flags.
*/
if (!prefixcmp(cmd, CMD_EXEC_PATH)) {
if (strstarts(cmd, CMD_EXEC_PATH)) {
cmd += strlen(CMD_EXEC_PATH);
if (*cmd == '=')
set_argv_exec_path(cmd + 1);
Expand Down Expand Up @@ -229,7 +229,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
*envchanged = 1;
(*argv)++;
(*argc)--;
} else if (!prefixcmp(cmd, CMD_DEBUGFS_DIR)) {
} else if (strstarts(cmd, CMD_DEBUGFS_DIR)) {
tracing_path_set(cmd + strlen(CMD_DEBUGFS_DIR));
fprintf(stderr, "dir: %s\n", tracing_path);
if (envchanged)
Expand Down Expand Up @@ -470,14 +470,14 @@ int main(int argc, const char **argv)
* So we just directly call the internal command handler, and
* die if that one cannot handle it.
*/
if (!prefixcmp(cmd, "perf-")) {
if (strstarts(cmd, "perf-")) {
cmd += 5;
argv[0] = cmd;
handle_internal_command(argc, argv);
fprintf(stderr, "cannot handle %s internally", cmd);
goto out;
}
if (!prefixcmp(cmd, "trace")) {
if (strstarts(cmd, "trace")) {
#ifdef HAVE_LIBAUDIT_SUPPORT
setup_path();
argv[0] = "trace";
Expand All @@ -495,7 +495,7 @@ int main(int argc, const char **argv)
commit_pager_choice();

if (argc > 0) {
if (!prefixcmp(argv[0], "--"))
if (strstarts(argv[0], "--"))
argv[0] += 2;
} else {
/* The user didn't specify a command; give them help */
Expand Down
3 changes: 2 additions & 1 deletion tools/perf/ui/browser.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <linux/compiler.h>
#include <linux/list.h>
#include <linux/rbtree.h>
#include <linux/string.h>
#include <stdlib.h>
#include <sys/ttydefaults.h>
#include "browser.h"
Expand Down Expand Up @@ -563,7 +564,7 @@ static int ui_browser__color_config(const char *var, const char *value,
int i;

/* same dir for all commands */
if (prefixcmp(var, "colors.") != 0)
if (!strstarts(var, "colors.") != 0)
return 0;

for (i = 0; ui_browser__colorsets[i].name != NULL; ++i) {
Expand Down
3 changes: 2 additions & 1 deletion tools/perf/ui/browsers/annotate.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include <inttypes.h>
#include <pthread.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <sys/ttydefaults.h>

struct disasm_line_samples {
Expand Down Expand Up @@ -1198,7 +1199,7 @@ static int annotate__config(const char *var, const char *value,
struct annotate_config *cfg;
const char *name;

if (prefixcmp(var, "annotate.") != 0)
if (!strstarts(var, "annotate."))
return 0;

name = var + 9;
Expand Down
3 changes: 2 additions & 1 deletion tools/perf/ui/stdio/hist.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <stdio.h>
#include <linux/string.h>

#include "../../util/util.h"
#include "../../util/hist.h"
Expand Down Expand Up @@ -292,7 +293,7 @@ static size_t callchain__fprintf_graph(FILE *fp, struct rb_root *root,
* displayed twice.
*/
if (!i++ && field_order == NULL &&
sort_order && !prefixcmp(sort_order, "sym"))
sort_order && strstarts(sort_order, "sym"))
continue;

if (!printed) {
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/util/bpf-loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -1246,7 +1246,7 @@ int bpf__config_obj(struct bpf_object *obj,
if (!obj || !term || !term->config)
return -EINVAL;

if (!prefixcmp(term->config, "map:")) {
if (strstarts(term->config, "map:")) {
key_scan_pos = sizeof("map:") - 1;
err = bpf__obj_config_map(obj, term, evlist, &key_scan_pos);
goto out;
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/util/callchain.c
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ int perf_callchain_config(const char *var, const char *value)
{
char *endptr;

if (prefixcmp(var, "call-graph."))
if (!strstarts(var, "call-graph."))
return 0;
var += sizeof("call-graph.") - 1;

Expand Down
13 changes: 7 additions & 6 deletions tools/perf/util/config.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/string.h>

#include "sane_ctype.h"

Expand Down Expand Up @@ -433,22 +434,22 @@ static int perf_ui_config(const char *var, const char *value)
int perf_default_config(const char *var, const char *value,
void *dummy __maybe_unused)
{
if (!prefixcmp(var, "core."))
if (strstarts(var, "core."))
return perf_default_core_config(var, value);

if (!prefixcmp(var, "hist."))
if (strstarts(var, "hist."))
return perf_hist_config(var, value);

if (!prefixcmp(var, "ui."))
if (strstarts(var, "ui."))
return perf_ui_config(var, value);

if (!prefixcmp(var, "call-graph."))
if (strstarts(var, "call-graph."))
return perf_callchain_config(var, value);

if (!prefixcmp(var, "llvm."))
if (strstarts(var, "llvm."))
return perf_llvm_config(var, value);

if (!prefixcmp(var, "buildid."))
if (strstarts(var, "buildid."))
return perf_buildid_config(var, value);

/* Add other config variables here. */
Expand Down
2 changes: 1 addition & 1 deletion tools/perf/util/llvm-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ struct llvm_param llvm_param = {

int perf_llvm_config(const char *var, const char *value)
{
if (prefixcmp(var, "llvm."))
if (!strstarts(var, "llvm."))
return 0;
var += sizeof("llvm.") - 1;

Expand Down

0 comments on commit 8e99b6d

Please sign in to comment.