shithub: oai

ref: 1c65e9795d3a51c26a87296d53b0ebe9efdc7719
dir: /tools/cmd.tool/

View raw version
static char*
cmd(OToolcall tc, void*)
{
	JSON *j, *jc, *ja;
	char *cmd, *args;
	char *ret;
	
	if (!allowed(tc, 1))
		return abortcall(tc);
	
	j = jsonparse(tc.arguments);
	jc = jsonbyname(j, "cmd");
	ja = jsonbyname(j, "args");
	
	if (!jc)
		goto Enocmd;
	if (!ja)
		goto Enoargs;
	
	cmd = jsonstr(jc);
	if (!cmd)
		goto Enocmd;
	
	if (ja->t != JSONArray)
		goto Enoargs;
	
	args = joinstrarray(ja->first, " ", 0);
	cmd = smprint("%s %s", cmd, args);
	
	ret = callfunc(cmd);
	free(args);
	jsonfree(j);
	
	return ret;
	
Enocmd:
	jsonfree(j);
	return strdup("no command");
Enoargs:
	jsonfree(j);
	return strdup("no arguments");
}

static char *cmddesc = "call a function in the rc shell.";
static char *cmdargs = ""
%%json
{
	"type": "object",
	"properties": {
		"cmd": {
			"type": "string",
			"description": "name or path of the command."
		},
		"args": {
			"type": "array",
			"description": "command line arguments. Can be empty. Wildcards like * are allowed.",
			"items": { "type": "string" }
		}
	},
	"required": [ "cmd", "args" ]
}
%/json
;