|
@@ -48,6 +48,9 @@
|
|
|
# include <sys/wait.h>
|
|
# include <sys/wait.h>
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+/* used in _cmd_open to pass the environment to commands */
|
|
|
|
|
+extern char **environ;
|
|
|
|
|
+
|
|
|
/** macros **/
|
|
/** macros **/
|
|
|
#ifndef WEXITSTATUS
|
|
#ifndef WEXITSTATUS
|
|
|
# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
|
|
# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
|
|
@@ -122,7 +125,6 @@ cmd_init (void)
|
|
|
static int
|
|
static int
|
|
|
_cmd_open (char *const *argv, int *pfd, int *pfderr)
|
|
_cmd_open (char *const *argv, int *pfd, int *pfderr)
|
|
|
{
|
|
{
|
|
|
- char *env[2];
|
|
|
|
|
pid_t pid;
|
|
pid_t pid;
|
|
|
#ifdef RLIMIT_CORE
|
|
#ifdef RLIMIT_CORE
|
|
|
struct rlimit limit;
|
|
struct rlimit limit;
|
|
@@ -137,8 +139,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
|
|
|
if (!_cmd_pids)
|
|
if (!_cmd_pids)
|
|
|
CMD_INIT;
|
|
CMD_INIT;
|
|
|
|
|
|
|
|
- env[0] = strdup ("LC_ALL=C");
|
|
|
|
|
- env[1] = '\0';
|
|
|
|
|
|
|
+ setenv("LC_ALL", "C", 1);
|
|
|
|
|
|
|
|
if (pipe (pfd) < 0 || pipe (pfderr) < 0 || (pid = fork ()) < 0)
|
|
if (pipe (pfd) < 0 || pipe (pfderr) < 0 || (pid = fork ()) < 0)
|
|
|
return -1; /* errno set by the failing function */
|
|
return -1; /* errno set by the failing function */
|
|
@@ -169,7 +170,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
|
|
|
if (_cmd_pids[i] > 0)
|
|
if (_cmd_pids[i] > 0)
|
|
|
close (i);
|
|
close (i);
|
|
|
|
|
|
|
|
- execve (argv[0], argv, env);
|
|
|
|
|
|
|
+ execve (argv[0], argv, environ);
|
|
|
_exit (STATE_UNKNOWN);
|
|
_exit (STATE_UNKNOWN);
|
|
|
}
|
|
}
|
|
|
|
|
|