summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorK.Takata <kentkt@csc.jp>2023-05-31 12:47:45 +0100
committerBram Moolenaar <Bram@vim.org>2023-05-31 12:47:45 +0100
commit3c240f608c38ef1af67e112e0e689751c003f946 (patch)
tree841108ffba208d4a0758817ae58d3ff0f9a5a833
parent29b4c513b11deb37f0e0538df53d195f602fa42c (diff)
patch 9.0.1593: MS-Windows: assert error when compiled with debug modev9.0.1593
Problem: MS-Windows: assert error when compiled with debug mode. Solution: Adjust arguments to setvbuf(). (Ken Takata, closes #12467)
-rw-r--r--src/alloc.c1
-rw-r--r--src/main.c29
-rw-r--r--src/proto/main.pro1
-rw-r--r--src/version.c2
4 files changed, 30 insertions, 3 deletions
diff --git a/src/alloc.c b/src/alloc.c
index e3e6d0430b..fa92c56e58 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -580,6 +580,7 @@ free_all_mem(void)
# ifdef FEAT_EVAL
free_resub_eval_result();
# endif
+ free_vbuf();
}
#endif
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(&params);
#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.
diff --git a/src/proto/main.pro b/src/proto/main.pro
index 307b6063c0..496fe66be6 100644
--- a/src/proto/main.pro
+++ b/src/proto/main.pro
@@ -3,6 +3,7 @@ int vim_main2(void);
void common_init(mparm_T *paramp);
int is_not_a_term(void);
int is_not_a_term_or_gui(void);
+void free_vbuf(void);
char_u *get_gui_dialog_file(void);
int op_pending(void);
void may_trigger_safestate(int safe);
diff --git a/src/version.c b/src/version.c
index 45e5b58cf1..3f0eb0d84e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1593,
+/**/
1592,
/**/
1591,