--- chat.c.~1.21.~ Fri Oct 31 08:22:03 2003 +++ chat.c Sun Nov 4 12:02:43 2007 @@ -439,6 +439,22 @@ terminate(code); } +/* As above, but does not call terminate. This is for functions which + need to handle termination themselves, such as terminate(). */ + +void +fatal_no_terminate(int code, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vfmtmsg(line, sizeof(line), fmt, args); + if (to_log) + syslog(LOG_ERR, "%s", line); + if (to_stderr) + fprintf(stderr, "%s\n", line); +} + int alarmed = 0; SIGTYPE sigalrm(int signo __unused) @@ -547,8 +563,10 @@ #if defined(get_term_param) if (have_tty_parameters) { - if (set_term_param (&saved_tty_parameters) < 0) - fatal(2, "Can't restore terminal parameters: %m"); + if (set_term_param (&saved_tty_parameters) < 0) { + fatal_no_terminate(2, "Can't restore terminal parameters: %m"); + status = 2; + } } #endif