Ejemplo n.º 1
0
/*
 * Create a process description
 */
ni_shellcmd_t *
ni_shellcmd_new(const ni_string_array_t *argv)
{
	ni_shellcmd_t *cmd;
	unsigned int i;

	cmd = xcalloc(1, sizeof(*cmd));
	cmd->refcount = 1;
	if (!argv)
		return cmd;

	for (i = 0; i < argv->count; ++i) {
		const char *arg = argv->data[i];

		if (ni_string_empty(arg)) {
			__ni_shellcmd_free(cmd);
			return NULL;
		}

		if (ni_string_array_append(&cmd->argv, arg) < 0) {
			__ni_shellcmd_free(cmd);
			return NULL;
		}
	}

	if (__ni_shellcmd_format(&cmd->command, &cmd->argv) == NULL) {
		__ni_shellcmd_free(cmd);
		return NULL;
	}
	if (ni_string_array_copy(&cmd->environ, __ni_default_environment()) < 0) {
		__ni_shellcmd_free(cmd);
		return NULL;
	}
	return cmd;
}
Ejemplo n.º 2
0
void
ni_shellcmd_free(ni_shellcmd_t *cmd)
{
	if (cmd) {
		ni_assert(cmd->refcount);
		cmd->refcount--;
		if (cmd->refcount == 0)
			__ni_shellcmd_free(cmd);
	}
}
Ejemplo n.º 3
0
/*
 * Create a process description
 */
ni_shellcmd_t *
ni_shellcmd_new(const ni_string_array_t *argv)
{
	ni_shellcmd_t *cmd;

	cmd = xcalloc(1, sizeof(*cmd));
	cmd->refcount = 1;

	if (argv && !__ni_shellcmd_set_argv(cmd, argv)) {
		__ni_shellcmd_free(cmd);
		return NULL;
	}

	if (ni_string_array_copy(&cmd->environ, __ni_default_environment()) < 0) {
		__ni_shellcmd_free(cmd);
		return NULL;
	}
	return cmd;
}
Ejemplo n.º 4
0
ni_shellcmd_t *
ni_shellcmd_parse(const char *command)
{
	ni_shellcmd_t *cmd;

	if (ni_string_empty(command))
		return NULL;

	cmd = xcalloc(1, sizeof(*cmd));
	cmd->refcount = 1;

	ni_string_dup(&cmd->command, command);
	if (!__ni_shellcmd_parse(&cmd->argv, cmd->command)) {
		__ni_shellcmd_free(cmd);
		return NULL;
	}
	if (ni_string_array_copy(&cmd->environ, __ni_default_environment()) < 0) {
		__ni_shellcmd_free(cmd);
		return NULL;
	}

	return cmd;
}