version 1.90, 2010/10/16 08:31:55 |
version 1.91, 2010/10/16 08:42:35 |
|
|
|
|
#include <errno.h> |
#include <errno.h> |
#include <event.h> |
#include <event.h> |
|
#include <fcntl.h> |
#include <paths.h> |
#include <paths.h> |
#include <pwd.h> |
#include <pwd.h> |
#include <signal.h> |
#include <signal.h> |
|
|
{ |
{ |
const char *shellname, *ptr; |
const char *shellname, *ptr; |
char *argv0; |
char *argv0; |
|
int mode; |
|
|
ptr = strrchr(shell, '/'); |
ptr = strrchr(shell, '/'); |
if (ptr != NULL && *(ptr + 1) != '\0') |
if (ptr != NULL && *(ptr + 1) != '\0') |
|
|
xasprintf(&argv0, "%s", shellname); |
xasprintf(&argv0, "%s", shellname); |
setenv("SHELL", shell, 1); |
setenv("SHELL", shell, 1); |
|
|
|
if ((mode = fcntl(STDIN_FILENO, F_GETFL)) != -1) |
|
fcntl(STDIN_FILENO, F_SETFL, mode & ~O_NONBLOCK); |
|
if ((mode = fcntl(STDOUT_FILENO, F_GETFL)) != -1) |
|
fcntl(STDOUT_FILENO, F_SETFL, mode & ~O_NONBLOCK); |
|
if ((mode = fcntl(STDERR_FILENO, F_GETFL)) != -1) |
|
fcntl(STDERR_FILENO, F_SETFL, mode & ~O_NONBLOCK); |
closefrom(STDERR_FILENO + 1); |
closefrom(STDERR_FILENO + 1); |
|
|
execl(shell, argv0, "-c", shellcmd, (char *) NULL); |
execl(shell, argv0, "-c", shellcmd, (char *) NULL); |