1 /* exec.cc: exec system call support.
3 Copyright 1996, 1997, 1998, 2000 Cygnus Solutions.
5 This file is part of Cygwin.
7 This software is a copyrighted work licensed under the terms of the
8 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
19 /* This is called _execve and not execve because the real execve is defined
20 in libc/posix/execve.c. It calls us. */
24 _execve (const char *path, const char *const argv[], const char *const envp[])
26 static char *const empty_env[] = { 0 };
30 return _spawnve (NULL, _P_OVERLAY, path, argv, envp);
35 execl (const char *path, const char *arg0, ...)
39 const char *argv[1024];
41 va_start (args, arg0);
45 argv[i] = va_arg (args, const char *);
46 while (argv[i++] != NULL);
49 return _execve (path, (char * const *) argv, cur_environ ());
54 execv (const char *path, char * const *argv)
57 return _execve (path, (char * const *) argv, cur_environ ());
60 /* the same as a standard exec() calls family, but with NT security support */
64 sexecve (HANDLE hToken, const char *path, const char *const argv[],
65 const char *const envp[])
67 _spawnve (hToken, _P_OVERLAY, path, argv, envp);
73 sexecl (HANDLE hToken, const char *path, const char *arg0, ...)
77 const char *argv[1024];
79 va_start (args, arg0);
84 argv[i] = va_arg (args, const char *);
85 while (argv[i++] != NULL);
90 return sexecve (hToken, path, (char * const *) argv, cur_environ ());
95 sexecle (HANDLE hToken, const char *path, const char *arg0, ...)
99 const char * const *envp;
100 const char *argv[1024];
102 va_start (args, arg0);
107 argv[i] = va_arg (args, const char *);
108 while (argv[i++] != NULL);
110 envp = va_arg (args, const char * const *);
114 return sexecve(hToken, path, (char * const *) argv, (char * const *) envp);
119 sexeclp (HANDLE hToken, const char *path, const char *arg0, ...)
123 const char *argv[1024];
125 va_start (args, arg0);
130 argv[i] = va_arg (args, const char *);
131 while (argv[i++] != NULL);
136 return sexecvpe (hToken, path, (const char * const *) argv, cur_environ ());
141 sexeclpe (HANDLE hToken, const char *path, const char *arg0, ...)
145 const char * const *envp;
146 const char *argv[1024];
148 va_start (args, arg0);
153 argv[i] = va_arg (args, const char *);
154 while (argv[i++] != NULL);
156 envp = va_arg (args, const char * const *);
160 return sexecvpe (hToken, path, argv, envp);
165 sexecv (HANDLE hToken, const char *path, const char * const *argv)
168 return sexecve (hToken, path, argv, cur_environ ());
173 sexecp (HANDLE hToken, const char *path, const char * const *argv)
176 return sexecvpe (hToken, path, argv, cur_environ ());
180 * Copy string, until c or <nul> is encountered.
181 * NUL-terminate the destination string (s1).
182 * Return pointer to terminating byte in dst string.
186 strccpy (char *s1, const char **s2, char c)
188 while (**s2 && **s2 != c)
198 sexecvpe (HANDLE hToken, const char *file, const char * const *argv,
199 const char *const *envp)
203 return sexecve (hToken, find_exec (file, buf), argv, envp);