aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/system.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/src/system.c b/src/system.c
index 526f0ec..36500d2 100644
--- a/src/system.c
+++ b/src/system.c
@@ -3,8 +3,6 @@
int shell(struct Process *proc, char *args) {
struct Process selfproc;
- FILE *fp_out = NULL;
- FILE *fp_err = NULL;
pid_t pid;
pid_t status;
status = 0;
@@ -39,13 +37,17 @@ int shell(struct Process *proc, char *args) {
fprintf(stderr, "fork failed\n");
exit(1);
} else if (pid == 0) {
- int retval;
+ FILE *fp_out = NULL;
+ FILE *fp_err = NULL;
+
if (strlen(proc->f_stdout)) {
fp_out = freopen(proc->f_stdout, "w+", stdout);
}
if (strlen(proc->f_stderr)) {
- fp_err = freopen(proc->f_stderr, "w+", stderr);
+ if (!proc->redirect_stderr) {
+ fp_err = freopen(proc->f_stderr, "w+", stderr);
+ }
}
if (proc->redirect_stderr) {
@@ -56,28 +58,7 @@ int shell(struct Process *proc, char *args) {
dup2(fileno(stdout), fileno(stderr));
}
- retval = execl("/bin/bash", "bash", "-c", t_name, (char *) NULL);
- if (!access(t_name, F_OK)) {
- remove(t_name);
- }
-
- if (strlen(proc->f_stdout)) {
- if (fp_out != NULL) {
- fflush(fp_out);
- fclose(fp_out);
- }
- fflush(stdout);
- fclose(stdout);
- }
- if (strlen(proc->f_stderr)) {
- if (fp_err) {
- fflush(fp_err);
- fclose(fp_err);
- }
- fflush(stderr);
- fclose(stderr);
- }
- return retval;
+ return execl("/bin/bash", "bash", "--norc", t_name, (char *) NULL);
} else {
if (waitpid(pid, &status, WUNTRACED) > 0) {
if (WIFEXITED(status) && WEXITSTATUS(status)) {