@@ -709,25 +709,6 @@ static const char *set_config_filename(const char *config_filename)
return menu_backtitle;
}
-/* command = 0 is supress, 1 is restore */
-static void supress_stdout(int command)
-{
- static FILE *org_stdout;
- static FILE *org_stderr;
-
- if (command == 0) {
- org_stdout = stdout;
- org_stderr = stderr;
- stdout = fopen("/dev/null", "a");
- stderr = fopen("/dev/null", "a");
- } else {
- fclose(stdout);
- fclose(stderr);
- stdout = org_stdout;
- stderr = org_stderr;
- }
-}
-
/* return = 0 means we are successful.
* -1 means go on doing what you were doing
*/
@@ -753,9 +734,7 @@ static int do_exit(void)
/* if we got here, the user really wants to exit */
switch (res) {
case 0:
- supress_stdout(0);
res = conf_write(filename);
- supress_stdout(1);
if (res)
btn_dialog(
main_window,
@@ -1449,9 +1428,7 @@ static void conf_save(void)
case 0:
if (!dialog_input_result[0])
return;
- supress_stdout(0);
res = conf_write(dialog_input_result);
- supress_stdout(1);
if (!res) {
char buf[1024];
sprintf(buf, "%s %s",
@@ -1495,6 +1472,8 @@ void setup_windows(void)
int main(int ac, char **av)
{
char *mode;
+ FILE *fp;
+ int fd;
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
@@ -1509,8 +1488,25 @@ int main(int ac, char **av)
single_menu_mode = 1;
}
+ /* Duplicate stdout before redirecting it */
+ fd = dup(STDOUT_FILENO);
+ if (fd < 0) {
+ perror("dup");
+ return 1;
+ }
+
+ fp = fdopen(fd, "a");
+ if (fp == NULL) {
+ perror("fdopen");
+ return 1;
+ }
+
+ freopen("/dev/null", "a", stdout);
+ freopen("/dev/null", "a", stderr);
+
/* Initialize curses */
- initscr();
+ newterm(NULL, fp, stdin);
+
/* set color theme */
set_colors();
@@ -1521,7 +1517,7 @@ int main(int ac, char **av)
if (COLS < 75 || LINES < 20) {
endwin();
- printf("Your terminal should have at "
+ fprintf(fp, "Your terminal should have at "
"least 20 lines and 75 columns\n");
return 1;
}