version 1.1.2.5, 2013/12/05 15:38:48
|
version 1.1.2.6, 2013/12/06 00:19:54
|
Line 88 e_popen(const char *command, const char *type, pid_t *
|
Line 88 e_popen(const char *command, const char *type, pid_t *
|
(type[1] && (type[1] != 'e' || type[2]))) |
(type[1] && (type[1] != 'e' || type[2]))) |
return (NULL); |
return (NULL); |
} |
} |
if ((cloexec ? pipe2(pdes, O_CLOEXEC) : pipe(pdes)) < 0) | if (socketpair(AF_UNIX, SOCK_STREAM | (cloexec ? O_CLOEXEC : 0), |
| 0, pdes) < 0) { |
| LOGERR; |
return (NULL); |
return (NULL); |
|
} |
|
|
if (!(cur = e_malloc(sizeof(struct tagPIOPID)))) { |
if (!(cur = e_malloc(sizeof(struct tagPIOPID)))) { |
close(pdes[0]); |
close(pdes[0]); |
Line 99 e_popen(const char *command, const char *type, pid_t *
|
Line 102 e_popen(const char *command, const char *type, pid_t *
|
|
|
argv[0] = "sh"; |
argv[0] = "sh"; |
argv[1] = "-c"; |
argv[1] = "-c"; |
argv[2] = (char *)command; | argv[2] = (char *) command; |
argv[3] = NULL; |
argv[3] = NULL; |
|
|
THREAD_LOCK(); |
THREAD_LOCK(); |
switch (pid = vfork()) { |
switch (pid = vfork()) { |
case -1: /* Error. */ |
case -1: /* Error. */ |
|
LOGERR; |
THREAD_UNLOCK(); |
THREAD_UNLOCK(); |
close(pdes[0]); |
close(pdes[0]); |
close(pdes[1]); |
close(pdes[1]); |