SHA256
3
0
forked from pool/bash
bash/readline-6.2-msgdynamic.patch

72 lines
1.8 KiB
Diff
Raw Normal View History

--- lib/readline/display.c
+++ lib/readline/display.c 2012-07-18 08:04:36.456009352 +0000
@@ -176,7 +176,8 @@ int _rl_vis_botlin = 0;
static int last_lmargin;
/* A buffer for `modeline' messages. */
-static char msg_buf[128];
+static char *msg_buf;
+static size_t msg_buf_sz = 128;
/* Non-zero forces the redisplay even if we thought it was unnecessary. */
static int forced_display;
@@ -2139,6 +2140,32 @@ rl_message (va_alist)
#if defined (PREFER_VARARGS)
char *format;
#endif
+#if defined (HAVE_VSNPRINTF)
+ int vsnprbytes;
+#endif
+
+ if (!msg_buf)
+ msg_buf = xmalloc(msg_buf_sz);
+
+#if defined (HAVE_VSNPRINTF)
+ do
+ {
+ va_end (args);
+#if defined (PREFER_STDARG)
+ va_start (args, format);
+#else
+ va_start (args);
+ format = va_arg (args, char *);
+#endif
+ vsnprbytes = vsnprintf (msg_buf, msg_buf_sz - 1, format, args);
+ if (vsnprbytes < msg_buf_sz - 1)
+ break;
+
+ msg_buf_sz += 64;
+ msg_buf = xrealloc (msg_buf, msg_buf_sz);
+ }
+ while (1);
+#else
#if defined (PREFER_STDARG)
va_start (args, format);
@@ -2147,11 +2174,8 @@ rl_message (va_alist)
format = va_arg (args, char *);
#endif
-#if defined (HAVE_VSNPRINTF)
- vsnprintf (msg_buf, sizeof (msg_buf) - 1, format, args);
-#else
vsprintf (msg_buf, format, args);
- msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+ msg_buf[msg_buf_sz - 1] = '\0'; /* overflow? */
#endif
va_end (args);
@@ -2176,8 +2200,11 @@ int
rl_message (format, arg1, arg2)
char *format;
{
+ if (!msg_buf)
+ msg_buf = xmalloc(msg_buf_sz);
+
sprintf (msg_buf, format, arg1, arg2);
- msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+ msg_buf[msg_buf_sz - 1] = '\0'; /* overflow? */
rl_display_prompt = msg_buf;
if (saved_local_prompt == 0)