[vim] - patchlevel 007

Karsten Hopp karsten at fedoraproject.org
Wed Sep 22 15:21:48 UTC 2010


commit 0842700c4e462aa5998c6af7bec2369501e6d279
Author: Karsten Hopp <karsten at redhat.com>
Date:   Wed Sep 22 16:19:43 2010 +0200

    - patchlevel 007

 7.3.007 |  187 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 187 insertions(+), 0 deletions(-)
---
diff --git a/7.3.007 b/7.3.007
new file mode 100644
index 0000000..30b3745
--- /dev/null
+++ b/7.3.007
@@ -0,0 +1,187 @@
+To: vim-dev at vim.org
+Subject: Patch 7.3.007
+Fcc: outbox
+From: Bram Moolenaar <Bram at 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 at 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    ///


More information about the scm-commits mailing list