Author: stefan2
Date: Sun May 15 18:01:36 2011
New Revision: 1103486

URL: http://svn.apache.org/viewvc?rev=1103486&view=rev
Log:
Allocate stringbuf_t objects using a single apr_palloc call.

* subversion/libsvn_subr/svn_string.c
  (svn_stringbuf_create_ensure): model in symmetry to svn_string_ncreate

Modified:
    subversion/trunk/subversion/libsvn_subr/svn_string.c

Modified: subversion/trunk/subversion/libsvn_subr/svn_string.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/svn_string.c?rev=1103486&r1=1103485&r2=1103486&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/svn_string.c (original)
+++ subversion/trunk/subversion/libsvn_subr/svn_string.c Sun May 15 18:01:36 
2011
@@ -258,7 +258,8 @@ create_stringbuf(char *data, apr_size_t 
 svn_stringbuf_t *
 svn_stringbuf_create_ensure(apr_size_t blocksize, apr_pool_t *pool)
 {
-  char *data;
+  void *mem;
+  svn_stringbuf_t *new_string;
 
   /* apr_palloc will allocate multiples of 8.
    * Thus, we would waste some of that memory if we stuck to the
@@ -266,12 +267,21 @@ svn_stringbuf_create_ensure(apr_size_t b
    * use some other aligment or none at all. */
 
   ++blocksize; /* + space for '\0' */
-  data = apr_palloc(pool, APR_ALIGN_DEFAULT(blocksize));
+  blocksize = APR_ALIGN_DEFAULT(blocksize);
+  
+  /* Allocate memory for svn_string_t and data in one chunk. */
+  mem = apr_palloc(pool, sizeof(*new_string) + blocksize);
+
+  /* Initialize header and string */
+  new_string = mem;
+
+  new_string->data = (char*)mem + sizeof(*new_string);
+  new_string->data[0] = '\0';
+  new_string->len = 0;
+  new_string->blocksize = blocksize;
+  new_string->pool = pool;
 
-  data[0] = '\0';
-
-  /* wrap an svn_stringbuf_t around the new data buffer. */
-  return create_stringbuf(data, 0, blocksize, pool);
+  return new_string;
 }
 
 svn_stringbuf_t *


Reply via email to