int execlp(const char* file, const char* arg, ...) { const char** args; va_list list; int count; // count arguments va_start(list, arg); count = count_arguments(list, arg, NULL); va_end(list); // copy arguments args = (const char**)alloca((count + 1) * sizeof(char*)); va_start(list, arg); copy_arguments(list, args, arg); va_end(list); return execvp(file, (char* const*)args); }
int execl(const char* path, const char* arg, ...) { const char** args; va_list list; int count; // count arguments va_start(list, arg); count = count_arguments(list, arg, NULL); va_end(list); // copy arguments args = (const char**)alloca((count + 1) * sizeof(char*)); va_start(list, arg); copy_arguments(list, args, arg); va_end(list); return do_exec(path, (char* const*)args, environ, false); }
int execle(const char* path, const char* arg, ... /*, char** env */) { const char** args; char** env; va_list list; int count; // count arguments va_start(list, arg); count = count_arguments(list, arg, &env); va_end(list); // copy arguments args = (const char**)alloca((count + 1) * sizeof(char*)); va_start(list, arg); copy_arguments(list, args, arg); va_end(list); return do_exec(path, (char* const*)args, env, false); }
static int handle_command(const char **argv) { int ret = CMD_SUCCESS, i = 0, argc, command_ret = CMD_SUCCESS; struct cmd_struct *cmd; if (argv == NULL || (!opt_ctrl_url && opt_data_url) || (opt_ctrl_url && !opt_data_url)) { usage(stderr); command_ret = CMD_ERROR; goto end; } argc = count_arguments(argv); cmd = &actions[i]; while (cmd->func != NULL) { /* Find command */ if (strcmp(argv[0], cmd->name) == 0) { if (lttng_opt_mi) { /* Action element */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_command_action); if (ret) { ret = CMD_ERROR; goto end; } /* Name of the action */ ret = mi_lttng_writer_write_element_string(writer, config_element_name, argv[0]); if (ret) { ret = CMD_ERROR; goto end; } /* Open output element */ ret = mi_lttng_writer_open_element(writer, mi_lttng_element_command_output); if (ret) { ret = CMD_ERROR; goto end; } } command_ret = cmd->func(argc, argv); if (lttng_opt_mi) { /* Close output and action element */ ret = mi_lttng_close_multi_element(writer, 2); if (ret) { ret = CMD_ERROR; goto end; } } goto end; } i++; cmd = &actions[i]; } ret = CMD_UNDEFINED; end: /* Overwrite ret if an error occurred in cmd->func() */ ret = command_ret ? command_ret : ret; return ret; }