* doc.c (get_doc_string): Rework so that
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 18 Aug 2011 08:37:41 +0000 (01:37 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 18 Aug 2011 08:37:41 +0000 (01:37 -0700)
get_doc_string_buffer_size is the actual buffer size, rather than
being 1 less than the actual buffer size; this makes xpalloc more
convenient.

src/ChangeLog
src/doc.c

index 4613192..2677f03 100644 (file)
@@ -2,6 +2,11 @@
 
        Integer and memory overflow issues (Bug#9196).
 
+       * doc.c (get_doc_string): Rework so that
+       get_doc_string_buffer_size is the actual buffer size, rather than
+       being 1 less than the actual buffer size; this makes xpalloc more
+       convenient.
+
        * image.c (x_allocate_bitmap_record, cache_image):
        * xselect.c (Fx_register_dnd_atom):
        Simplify previous changes by using xpalloc.
index eb8ff3c..83e943c 100644 (file)
--- a/src/doc.c
+++ b/src/doc.c
@@ -166,19 +166,19 @@ get_doc_string (Lisp_Object filepos, int unibyte, int definition)
   p = get_doc_string_buffer;
   while (1)
     {
-      ptrdiff_t space_left = (get_doc_string_buffer_size
+      ptrdiff_t space_left = (get_doc_string_buffer_size - 1
                              - (p - get_doc_string_buffer));
       int nread;
 
       /* Allocate or grow the buffer if we need to.  */
-      if (space_left == 0)
+      if (space_left <= 0)
        {
          ptrdiff_t in_buffer = p - get_doc_string_buffer;
          get_doc_string_buffer =
            xpalloc (get_doc_string_buffer, &get_doc_string_buffer_size,
                     16 * 1024, -1, 1);
          p = get_doc_string_buffer + in_buffer;
-         space_left = (get_doc_string_buffer_size
+         space_left = (get_doc_string_buffer_size - 1
                        - (p - get_doc_string_buffer));
        }