diff options
Diffstat (limited to 'source/ap/vim/patches/7.3.007')
-rw-r--r-- | source/ap/vim/patches/7.3.007 | 187 |
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 00000000..30b3745c --- /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 /// |