static int find_exec_pathsearch(const char *filepath, char **argv, char *newpath, int newpath_size, char ***new_argv) { char *newname = NULL; int result; if (!filepath) { newpath[0] = '\0'; return 0; } if (filepath[0] == '/' || filepath[0] == '.') { find_exec(filepath, argv, newpath, newpath_size, new_argv); return 0; } check_for_fork(); if (ldcsid < 0 || !use_ldcs) { strncpy(newpath, filepath, newpath_size); newpath[newpath_size-1] = '\0'; return 0; } sync_cwd(); result = exec_pathsearch(ldcsid, filepath, &newname); if (result == -1) return -1; result = prep_exec(filepath, argv, newname, newpath, newpath_size, new_argv); return result; }
/* ** TODO: search_in_path(node->argv[0]) ** TODO: Check if argv is correctly passed and as for envp do it yourself. */ int standard_execute(t_node_command *node) { char *file_path; file_path = find_exec(node->argv[0]); if (!file_path) return (0); return (execve(file_path, node->argv, NULL)); }
static int execve_wrapper(const char *path, char *const argv[], char *const envp[]) { char newpath[MAX_PATH_LEN+1]; char **new_argv = NULL; int result, error; debug_printf2("Intercepted execve on %s\n", path); find_exec(path, (char **) argv, newpath, MAX_PATH_LEN+1, &new_argv); debug_printf("execve redirection of %s to %s\n", path, newpath); result = orig_execve(newpath, new_argv ? new_argv : argv, (char **) envp); error = errno; if (new_argv) spindle_free(new_argv); set_errno(error); return result; }
void pyepg_init ( void ) { char buf[256]; RB_INIT(&_pyepg_channels); /* Internal module */ if (find_exec("pyepg", buf, sizeof(buf)-1)) epggrab_module_int_create(NULL, "pyepg-internal", "PyEPG", 4, buf, NULL, _pyepg_parse, NULL, NULL); /* External module */ _pyepg_module = (epggrab_module_t*) epggrab_module_ext_create(NULL, "pyepg", "PyEPG", 4, "pyepg", _pyepg_parse, NULL, &_pyepg_channels); }
static int execl_wrapper(const char *path, const char *arg0, ...) { int error, result; char newpath[MAX_PATH_LEN+1]; VARARG_TO_ARGV; debug_printf2("Intercepted execl on %s\n", path); find_exec(path, argv, newpath, MAX_PATH_LEN+1, &new_argv); debug_printf("execl redirection of %s to %s\n", path, newpath); result = execv(newpath, new_argv ? new_argv : argv); error = errno; VARARG_TO_ARGV_CLEANUP; set_errno(error); return result; }