#include "cache.h"
#include "util.h"
#include "config.h"

static const char *alias_key;
static char *alias_val;

static int alias_lookup_cb(const char *k, const char *v,
			   void *cb __maybe_unused)
{
	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) {
					zfree(argv);
					return error("cmdline ends with \\");
				}
			}
			cmdline[dst++] = c;
			src++;
		}
	}

	cmdline[dst] = 0;

	if (quoted) {
		zfree(argv);
		return error("unclosed quote");
	}

	return count;
}

'>refs</a><a class='active' href='/cgit.cgi/linux/net-next.git/log/sound/soc/fsl/mpc5200_dma.h'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/sound/soc/fsl/mpc5200_dma.h'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/sound/soc/fsl/mpc5200_dma.h'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/sound/soc/fsl/mpc5200_dma.h'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/sound/soc/fsl/mpc5200_dma.h'>
<select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound'>sound</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/soc'>soc</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/soc/fsl'>fsl</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/soc/fsl/mpc5200_dma.h'>mpc5200_dma.h</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/sound/soc/fsl/mpc5200_dma.h?showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
a4c056ad01682393be56d2be237e81610'>soc</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/soc/codecs?id=52f5631a4c056ad01682393be56d2be237e81610'>codecs</a>/<a href='/cgit.cgi/linux/net-next.git/log/sound/soc/codecs/ts3a227e.c?id=52f5631a4c056ad01682393be56d2be237e81610'>ts3a227e.c</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/sound/soc/codecs/ts3a227e.c?id=52f5631a4c056ad01682393be56d2be237e81610&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>