summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/eval.c2
-rw-r--r--src/expand.c2
-rw-r--r--src/init.h2
-rw-r--r--src/main.c4
-rw-r--r--src/mkinit.c8
-rw-r--r--src/redir.c2
6 files changed, 15 insertions, 5 deletions
diff --git a/src/eval.c b/src/eval.c
index 39c4e41..1b803db 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -112,7 +112,7 @@ STATIC const struct builtincmd bltin = {
 #ifdef mkinit
 INCLUDE "eval.h"
 
-RESET {
+EXITRESET {
 	evalskip = 0;
 	loopnest = 0;
 	if (savestatus >= 0) {
diff --git a/src/expand.c b/src/expand.c
index 7ed259a..45e9b79 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -1780,7 +1780,7 @@ varunset(const char *end, const char *var, const char *umsg, int varflags)
 
 INCLUDE "expand.h"
 
-RESET {
+EXITRESET {
 	ifsfree();
 }
 
diff --git a/src/init.h b/src/init.h
index e026e86..49791a0 100644
--- a/src/init.h
+++ b/src/init.h
@@ -35,5 +35,5 @@
  */
 
 void init(void);
+void exitreset(void);
 void reset(void);
-void initshellproc(void);
diff --git a/src/main.c b/src/main.c
index 9f03717..8b35118 100644
--- a/src/main.c
+++ b/src/main.c
@@ -106,7 +106,7 @@ main(int argc, char **argv)
 		int e;
 		int s;
 
-		reset();
+		exitreset();
 
 		e = exception;
 
@@ -114,6 +114,8 @@ main(int argc, char **argv)
 		if (e == EXEXIT || s == 0 || iflag == 0 || shlvl)
 			exitshell();
 
+		reset();
+
 		if (e == EXINT
 #if ATTY
 		 && (! attyset() || equal(termval(), "emacs"))
diff --git a/src/mkinit.c b/src/mkinit.c
index 9714bee..5bca9ee 100644
--- a/src/mkinit.c
+++ b/src/mkinit.c
@@ -106,6 +106,13 @@ char init[] = "\
  * Initialization code.\n\
  */\n";
 
+char exitreset[] = "\
+/*\n\
+ * This routine is called when an error or an interrupt occurs in an\n\
+ * interactive shell and control is returned to the main command loop\n\
+ * but prior to exitshell. \n\
+ */\n";
+
 char reset[] = "\
 /*\n\
  * This routine is called when an error or an interrupt occurs in an\n\
@@ -115,6 +122,7 @@ char reset[] = "\
 
 struct event event[] = {
 	{"INIT", "init", init},
+	{"EXITRESET", "exitreset", exitreset},
 	{"RESET", "reset", reset},
 	{NULL, NULL}
 };
diff --git a/src/redir.c b/src/redir.c
index 71b0f77..e67cc0a 100644
--- a/src/redir.c
+++ b/src/redir.c
@@ -374,7 +374,7 @@ popredir(int drop)
 
 INCLUDE "redir.h"
 
-RESET {
+EXITRESET {
 	/*
 	 * Discard all saved file descriptors.
 	 */