diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-06-06 20:33:43 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-06-06 20:33:43 +0200 | 
| commit | 864709302a80f26fa9da3be5b47304f0b8bae192 (patch) | |
| tree | 8c2bab78f141fe43a38914bd3e3aae0a88f958e5 /tools/perf/util/alias.c | |
| parent | 75b5032212641f6d38ac041416945e70da833b68 (diff) | |
| download | olio-linux-3.10-864709302a80f26fa9da3be5b47304f0b8bae192.tar.xz olio-linux-3.10-864709302a80f26fa9da3be5b47304f0b8bae192.zip  | |
perf_counter tools: Move from Documentation/perf_counter/ to tools/perf/
Several people have suggested that 'perf' has become a full-fledged
tool that should be moved out of Documentation/. Move it to the
(new) tools/ directory.
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <new-submission>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/alias.c')
| -rw-r--r-- | tools/perf/util/alias.c | 77 | 
1 files changed, 77 insertions, 0 deletions
diff --git a/tools/perf/util/alias.c b/tools/perf/util/alias.c new file mode 100644 index 00000000000..9b3dd2b428d --- /dev/null +++ b/tools/perf/util/alias.c @@ -0,0 +1,77 @@ +#include "cache.h" + +static const char *alias_key; +static char *alias_val; + +static int alias_lookup_cb(const char *k, const char *v, void *cb) +{ +	if (!prefixcmp(k, "alias.") && !strcmp(k+6, alias_key)) { +		if (!v) +			return config_error_nonbool(k); +		alias_val = strdup(v); +		return 0; +	} +	return 0; +} + +char *alias_lookup(const char *alias) +{ +	alias_key = alias; +	alias_val = NULL; +	perf_config(alias_lookup_cb, NULL); +	return alias_val; +} + +int split_cmdline(char *cmdline, const char ***argv) +{ +	int src, dst, count = 0, size = 16; +	char quoted = 0; + +	*argv = malloc(sizeof(char*) * size); + +	/* split alias_string */ +	(*argv)[count++] = cmdline; +	for (src = dst = 0; cmdline[src];) { +		char c = cmdline[src]; +		if (!quoted && isspace(c)) { +			cmdline[dst++] = 0; +			while (cmdline[++src] +					&& isspace(cmdline[src])) +				; /* skip */ +			if (count >= size) { +				size += 16; +				*argv = realloc(*argv, sizeof(char*) * size); +			} +			(*argv)[count++] = cmdline + dst; +		} else if (!quoted && (c == '\'' || c == '"')) { +			quoted = c; +			src++; +		} else if (c == quoted) { +			quoted = 0; +			src++; +		} else { +			if (c == '\\' && quoted != '\'') { +				src++; +				c = cmdline[src]; +				if (!c) { +					free(*argv); +					*argv = NULL; +					return error("cmdline ends with \\"); +				} +			} +			cmdline[dst++] = c; +			src++; +		} +	} + +	cmdline[dst] = 0; + +	if (quoted) { +		free(*argv); +		*argv = NULL; +		return error("unclosed quote"); +	} + +	return count; +} +  |