summaryrefslogtreecommitdiffstats
path: root/source/ap/vim/patches/7.3.007
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.3.007')
-rw-r--r--source/ap/vim/patches/7.3.007187
1 files changed, 187 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.3.007 b/source/ap/vim/patches/7.3.007
new file mode 100644
index 000000000..30b3745ca
--- /dev/null
+++ b/source/ap/vim/patches/7.3.007
@@ -0,0 +1,187 @@
+To: vim-dev@vim.org
+Subject: Patch 7.3.007
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.3.007
+Problem: Python code defines global "buffer". Re-implements a grow-array.
+Solution: Use a grow-array instead of coding the same functionality. Handle
+ out-of-memory situation properly.
+Files: src/if_py_both.h
+
+
+*** ../vim-7.3.006/src/if_py_both.h 2010-08-15 21:57:27.000000000 +0200
+--- src/if_py_both.h 2010-09-21 16:00:54.000000000 +0200
+***************
+*** 34,39 ****
+--- 34,40 ----
+ static PyObject *OutputWrite(PyObject *, PyObject *);
+ static PyObject *OutputWritelines(PyObject *, PyObject *);
+
++ /* Function to write a line, points to either msg() or emsg(). */
+ typedef void (*writefn)(char_u *);
+ static void writer(writefn fn, char_u *str, PyInt n);
+
+***************
+*** 122,173 ****
+ return Py_None;
+ }
+
+! static char_u *buffer = NULL;
+! static PyInt buffer_len = 0;
+! static PyInt buffer_size = 0;
+!
+ static writefn old_fn = NULL;
+
+ static void
+- buffer_ensure(PyInt n)
+- {
+- PyInt new_size;
+- char_u *new_buffer;
+-
+- if (n < buffer_size)
+- return;
+-
+- new_size = buffer_size;
+- while (new_size < n)
+- new_size += 80;
+-
+- if (new_size != buffer_size)
+- {
+- new_buffer = alloc((unsigned)new_size);
+- if (new_buffer == NULL)
+- return;
+-
+- if (buffer)
+- {
+- memcpy(new_buffer, buffer, buffer_len);
+- vim_free(buffer);
+- }
+-
+- buffer = new_buffer;
+- buffer_size = new_size;
+- }
+- }
+-
+- static void
+ PythonIO_Flush(void)
+ {
+! if (old_fn && buffer_len)
+ {
+! buffer[buffer_len] = 0;
+! old_fn(buffer);
+ }
+!
+! buffer_len = 0;
+ }
+
+ static void
+--- 123,141 ----
+ return Py_None;
+ }
+
+! /* Buffer IO, we write one whole line at a time. */
+! static garray_T io_ga = {0, 0, 1, 80, NULL};
+ static writefn old_fn = NULL;
+
+ static void
+ PythonIO_Flush(void)
+ {
+! if (old_fn != NULL && io_ga.ga_len > 0)
+ {
+! ((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
+! old_fn((char_u *)io_ga.ga_data);
+ }
+! io_ga.ga_len = 0;
+ }
+
+ static void
+***************
+*** 175,204 ****
+ {
+ char_u *ptr;
+
+! if (fn != old_fn && old_fn != NULL)
+ PythonIO_Flush();
+-
+ old_fn = fn;
+
+ while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
+ {
+ PyInt len = ptr - str;
+
+! buffer_ensure(buffer_len + len + 1);
+
+! memcpy(buffer + buffer_len, str, len);
+! buffer_len += len;
+! buffer[buffer_len] = 0;
+! fn(buffer);
+ str = ptr + 1;
+ n -= len + 1;
+! buffer_len = 0;
+ }
+
+! /* Put the remaining text into the buffer for later printing */
+! buffer_ensure(buffer_len + n + 1);
+! memcpy(buffer + buffer_len, str, n);
+! buffer_len += n;
+ }
+
+ /***************/
+--- 143,176 ----
+ {
+ char_u *ptr;
+
+! /* Flush when switching output function. */
+! if (fn != old_fn)
+ PythonIO_Flush();
+ old_fn = fn;
+
++ /* Write each NL separated line. Text after the last NL is kept for
++ * writing later. */
+ while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
+ {
+ PyInt len = ptr - str;
+
+! if (ga_grow(&io_ga, len + 1) == FAIL)
+! break;
+
+! mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
+! ((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
+! fn((char_u *)io_ga.ga_data);
+ str = ptr + 1;
+ n -= len + 1;
+! io_ga.ga_len = 0;
+ }
+
+! /* Put the remaining text into io_ga for later printing. */
+! if (n > 0 && ga_grow(&io_ga, n + 1) == OK)
+! {
+! mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
+! io_ga.ga_len += n;
+! }
+ }
+
+ /***************/
+*** ../vim-7.3.006/src/version.c 2010-09-18 13:36:41.000000000 +0200
+--- src/version.c 2010-09-21 16:49:13.000000000 +0200
+***************
+*** 716,717 ****
+--- 716,719 ----
+ { /* Add new patch number below this line */
++ /**/
++ 7,
+ /**/
+
+--
+hundred-and-one symptoms of being an internet addict:
+180. You maintain more than six e-mail addresses.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///