int fexecve (int fd, char *const argv[], char *const envp[]) { error_t err = HURD_DPORT_USE (fd, _hurd_exec (__mach_task_self (), port, argv, envp)); if (! err) err = EGRATUITOUS; return __hurd_fail (err); }
/* Replace the current process, executing FILE_NAME with arguments ARGV and environment ENVP. ARGV and ENVP are terminated by NULL pointers. */ int __execve (const char *file_name, char *const argv[], char *const envp[]) { error_t err; file_t file = __file_name_lookup (file_name, O_EXEC, 0); if (file == MACH_PORT_NULL) return -1; /* Hopefully this will not return. */ err = _hurd_exec (__mach_task_self (), file, argv, envp); /* Oh well. Might as well be tidy. */ __mach_port_deallocate (__mach_task_self (), file); return __hurd_fail (err); }