sd: remove 'ssd' driver support
[unleashed/tickless.git] / usr / src / lib / libast / common / comp / execvpe.c
blob9aee9cb9b90997859a640c7050a0e6364f653655
1 /***********************************************************************
2 * *
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
8 * *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
12 * *
13 * Information and Software Systems Research *
14 * AT&T Research *
15 * Florham Park NJ *
16 * *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
20 * *
21 ***********************************************************************/
22 #pragma prototyped
24 #include <ast_lib.h>
26 #if _lib_execvpe
28 #include <ast.h>
30 NoN(execvpe)
32 #else
34 #if defined(__EXPORT__)
35 __EXPORT__ int execvpe(const char*, char* const[], char* const[]);
36 #endif
38 #include <ast.h>
39 #include <errno.h>
41 #if defined(__EXPORT__)
42 #define extern __EXPORT__
43 #endif
45 extern int
46 execvpe(const char* name, char* const argv[], char* const envv[])
48 register const char* path = name;
49 char buffer[PATH_MAX];
51 if (*path != '/' && !(path = pathpath(buffer, name, NULL, PATH_REGULAR|PATH_EXECUTE)))
52 path = name;
53 execve(path, argv, envv);
54 if (errno == ENOEXEC)
56 register char** newargv;
57 register char** ov;
58 register char** nv;
60 for (ov = (char**)argv; *ov++;);
61 if (newargv = newof(0, char*, ov + 1 - (char**)argv, 0))
63 nv = newargv;
64 *nv++ = "sh";
65 *nv++ = (char*)path;
66 ov = (char**)argv;
67 while (*nv++ = *++ov);
68 path = pathshell();
69 execve(path, newargv, envv);
70 free(newargv);
72 else
73 errno = ENOMEM;
75 return -1;
78 #endif