diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c index 0e8e82cd4f..cca53fe256 100644 --- a/src/main.c +++ b/src/main.c @@ -76,6 +76,10 @@ static char *(main_errors[]) = // Various parameters passed between main() and other functions. static mparm_T params; +#ifdef _IOLBF +static void *s_vbuf = NULL; // buffer for setvbuf() +#endif + #ifndef NO_VIM_MAIN // skip this for unittests static char_u *start_dir = NULL; // current working dir on startup @@ -353,10 +357,14 @@ main check_tty(¶ms); #ifdef _IOLBF - // Ensure output works usefully without a tty: buffer lines instead of - // fully buffered. if (silent_mode) - setvbuf(stdout, NULL, _IOLBF, 0); + { + // Ensure output works usefully without a tty: buffer lines instead of + // fully buffered. + s_vbuf = malloc(BUFSIZ); + if (s_vbuf != NULL) + setvbuf(stdout, s_vbuf, _IOLBF, BUFSIZ); + } #endif // This message comes before term inits, but after setting "silent_mode" @@ -1027,6 +1035,21 @@ is_not_a_term_or_gui(void) ; } +#if defined(EXITFREE) || defined(PROTO) + void +free_vbuf(void) +{ +# ifdef _IOLBF + if (s_vbuf != NULL) + { + setvbuf(stdout, NULL, _IONBF, 0); + free(s_vbuf); + s_vbuf = NULL; + } +# endif +} +#endif + #if defined(FEAT_GUI) || defined(PROTO) /* * If a --gui-dialog-file argument was given return the file name. |