Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / basis / MLton / Process / spawnp.c
1 #include "platform.h"
2
3 #if HAS_SPAWN
4
5 C_Errno_t(C_PId_t) MLton_Process_spawnp (NullString8_t pNStr,
6 Array(NullString8_t) aStr) {
7 const char *path;
8 char **args;
9 int aLen;
10 char *aSaved;
11 C_PId_t res;
12
13 path = (const char *) pNStr;
14 args = (char **) aStr;
15 aLen = GC_getArrayLength((pointer)aStr);
16 aSaved = args[aLen - 1];
17 args[aLen - 1] = NULL;
18 res = spawnvp (SPAWN_MODE, path,
19 (const char * const *)args);
20 /* spawnvp failed */
21 args[aLen - 1] = aSaved;
22 return (C_Errno_t(C_PId_t))res;
23 }
24
25 #else
26
27 __attribute__ ((noreturn))
28 C_Errno_t(C_PId_t) MLton_Process_spawnp (__attribute__ ((unused)) NullString8_t pNStr,
29 __attribute__ ((unused)) Array(NullString8_t) aStr) {
30 die ("MLton_Process_spawnp not implemented");
31 }
32
33 #endif