Example #1
0
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);
}
Example #2
0
/* 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);
}