cmdedit: stop playing dirty games with atexit
diff --git a/shell/cmdedit.c b/shell/cmdedit.c
index 554a4eb..b0a5de7 100644
--- a/shell/cmdedit.c
+++ b/shell/cmdedit.c
@@ -1097,6 +1097,8 @@
 	char c;
 	char *pbuf;
 
+	cmdedit_prmt_len = 0;
+
 	if (!pwd_buf) {
 		pwd_buf = (char *)bb_msg_unknown;
 	}
@@ -1212,14 +1214,6 @@
 
 static sighandler_t previous_SIGWINCH_handler;
 
-static void cmdedit_reset_term(void)
-{
-	setTermSettings(STDIN_FILENO, (void *) &initial_settings);
-	/* restore SIGWINCH handler */
-	signal(SIGWINCH, previous_SIGWINCH_handler);
-	fflush(stdout);
-}
-
 static void cmdedit_setwidth(unsigned w, int redraw_flg)
 {
 	cmdedit_termw = w;
@@ -1241,32 +1235,6 @@
 		signal(SIGWINCH, win_changed); /* rearm ourself */
 }
 
-static void cmdedit_init(void)
-{
-	cmdedit_prmt_len = 0;
-	previous_SIGWINCH_handler = signal(SIGWINCH, win_changed);
-	win_changed(0); /* do initial resizing */
-
-#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
-	{
-		struct passwd *entry;
-
-		entry = getpwuid(geteuid());
-		if (entry) {
-			user_buf = xstrdup(entry->pw_name);
-			home_pwd_buf = xstrdup(entry->pw_dir);
-		}
-	}
-#endif
-
-#if ENABLE_FEATURE_COMMAND_TAB_COMPLETION
-	my_uid = getuid();
-	my_gid = getgid();
-#endif
-// Crap. We should be able to do it without atexit.
-	atexit(cmdedit_reset_term);     /* be sure to do this only once */
-}
-
 /*
  * The emacs and vi modes share much of the code in the big
  * command loop.  Commands entered when in vi's command mode (aka
@@ -1329,7 +1297,23 @@
 	setTermSettings(0, (void *) &new_settings);
 
 	/* Now initialize things */
-	cmdedit_init();
+	previous_SIGWINCH_handler = signal(SIGWINCH, win_changed);
+	win_changed(0); /* do initial resizing */
+#if ENABLE_FEATURE_GETUSERNAME_AND_HOMEDIR
+	{
+		struct passwd *entry;
+
+		entry = getpwuid(geteuid());
+		if (entry) {
+			user_buf = xstrdup(entry->pw_name);
+			home_pwd_buf = xstrdup(entry->pw_dir);
+		}
+	}
+#endif
+#if ENABLE_FEATURE_COMMAND_TAB_COMPLETION
+	my_uid = getuid();
+	my_gid = getgid();
+#endif
 	/* Print out the command prompt */
 	parse_prompt(prompt);
 
@@ -1746,8 +1730,11 @@
 #if ENABLE_FEATURE_SH_FANCY_PROMPT
 	free((char*)cmdedit_prompt);
 #endif
-	/* restore initial_settings and SIGWINCH handler */
-	cmdedit_reset_term();
+	/* restore initial_settings */
+	setTermSettings(STDIN_FILENO, (void *) &initial_settings);
+	/* restore SIGWINCH handler */
+	signal(SIGWINCH, previous_SIGWINCH_handler);
+	fflush(stdout);
 	return command_len;
 }