Author: brane
Date: Fri Jan 16 19:43:42 2026
New Revision: 1931378

Log:
On the better-pristines branch: Make a minor improvement to the internal
spillbuf API and its documentation. No funcitonal change.

* subversion/include/private/svn_subr_private.h
  (SVN_SPILLBUF__DELETE_ON_CLOSE,
   SVN_SPILLBUF__SPILL_ALL_CONTENTS): New flag constants.
  (svn_spillbuf__create_extended): Use a parameter with bitwise flags
   instead of a series of boolean arguments. This makes calls of this
   function self-documenting.
  (svn_spillbuf__create): Improve the documentation.
* subversion/libsvn_subr/spillbuf.c
  (struct svn_spillbuf_t): Move the byte-sized boolean flags to the end
   of the struct, possibly reducing space used by alignment padding.
  (init_spillbuf, init_spillbuf_extended): Remove single-use private functions.
  (svn_spillbuf__create_extended): Update the parameters and inline the
   code that was previously in  init_spillbuf_extended().
  (svn_spillbuf__create): Call svn_spillbuf__create_extended().

* subversion/tests/libsvn_subr/spillbuf-test.c: Update all calls to
   svn_spillbuf__create_extended() to reflect its changed parameters.

Modified:
   
subversion/branches/better-pristines/subversion/include/private/svn_subr_private.h
   subversion/branches/better-pristines/subversion/libsvn_subr/spillbuf.c
   
subversion/branches/better-pristines/subversion/tests/libsvn_subr/spillbuf-test.c

Modified: 
subversion/branches/better-pristines/subversion/include/private/svn_subr_private.h
==============================================================================
--- 
subversion/branches/better-pristines/subversion/include/private/svn_subr_private.h
  Fri Jan 16 18:45:02 2026        (r1931377)
+++ 
subversion/branches/better-pristines/subversion/include/private/svn_subr_private.h
  Fri Jan 16 19:43:42 2026        (r1931378)
@@ -89,21 +89,35 @@ extern "C" {
 typedef struct svn_spillbuf_t svn_spillbuf_t;
 
 
-/* Create a spill buffer.  */
-svn_spillbuf_t *
-svn_spillbuf__create(apr_size_t blocksize,
-                     apr_size_t maxsize,
-                     apr_pool_t *result_pool);
+/* Delete all files created by spillbuf operations when the spillbuf
+   is destroyed. This is the behaviour of svn_spilbuff__create(). */
+#define SVN_SPILLBUF__DELETE_ON_CLOSE     0x01
+
+/* When maxsize is reached, spill all contents buffered in memory to the
+   spill file, not just the overflow. This ensures that the spill file,
+   if one is created, will contain all the data written to the spillbuf. */
+#define SVN_SPILLBUF__SPILL_ALL_CONTENTS  0x02
 
-/* Create a spill buffer, with extra parameters.  */
+/* Create a spill buffer. FLAGS is a bitwise-or combination of the
+   constants defined above. See svn_io_open_unique_file3() in svn_io.h
+   for a description of the semantics of the DIRPATH parameter. */
 svn_spillbuf_t *
 svn_spillbuf__create_extended(apr_size_t blocksize,
                               apr_size_t maxsize,
-                              svn_boolean_t delete_on_close,
-                              svn_boolean_t spill_all_contents,
+                              unsigned flags,
                               const char* dirpath,
                               apr_pool_t *result_pool);
 
+/* Create a spill buffer with:
+      FLAGS = SVN_SPILLBUF__DELETE_ON_CLOSE
+      DIRPATH = NULL
+   The created spillbuf's behaviour is what we need when it's used as
+   a temporary buffer for connecting push-like and pull-like streams. */
+svn_spillbuf_t *
+svn_spillbuf__create(apr_size_t blocksize,
+                     apr_size_t maxsize,
+                     apr_pool_t *result_pool);
+
 /* Determine how much content is stored in the spill buffer.  */
 svn_filesize_t
 svn_spillbuf__get_size(const svn_spillbuf_t *buf);

Modified: subversion/branches/better-pristines/subversion/libsvn_subr/spillbuf.c
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_subr/spillbuf.c      
Fri Jan 16 18:45:02 2026        (r1931377)
+++ subversion/branches/better-pristines/subversion/libsvn_subr/spillbuf.c      
Fri Jan 16 19:43:42 2026        (r1931378)
@@ -74,6 +74,12 @@ struct svn_spillbuf_t {
   /* How much content remains in SPILL.  */
   svn_filesize_t spill_size;
 
+  /* The directory in which the spill file is created. */
+  const char *dirpath;
+
+  /* The name of the temporary spill file. */
+  const char *filename;
+
   /* When false, do not delete the spill file when it is closed. */
   svn_boolean_t delete_on_close;
 
@@ -81,12 +87,6 @@ struct svn_spillbuf_t {
      larger than MAXSIZE, all spillbuf contents will be written to the
      spill file. */
   svn_boolean_t spill_all_contents;
-
-  /* The directory in which the spill file is created. */
-  const char *dirpath;
-
-  /* The name of the temporary spill file. */
-  const char *filename;
 };
 
 
@@ -112,36 +112,21 @@ struct svn_spillbuf_reader_t {
   apr_size_t save_pos;
 };
 
-
-/* Extended spillbuf initialization. */
-static void
-init_spillbuf_extended(svn_spillbuf_t *buf,
-                       apr_size_t blocksize,
-                       apr_size_t maxsize,
-                       svn_boolean_t delete_on_close,
-                       svn_boolean_t spill_all_contents,
-                       const char *dirpath,
-                       apr_pool_t *result_pool)
+svn_spillbuf_t *
+svn_spillbuf__create_extended(apr_size_t blocksize,
+                              apr_size_t maxsize,
+                              unsigned flags,
+                              const char *dirpath,
+                              apr_pool_t *result_pool)
 {
+  svn_spillbuf_t *buf = apr_pcalloc(result_pool, sizeof(*buf));
   buf->pool = result_pool;
   buf->blocksize = blocksize;
   buf->maxsize = maxsize;
-  buf->delete_on_close = delete_on_close;
-  buf->spill_all_contents = spill_all_contents;
+  buf->delete_on_close = 0 != (flags & SVN_SPILLBUF__DELETE_ON_CLOSE);
+  buf->spill_all_contents = 0 != (flags & SVN_SPILLBUF__SPILL_ALL_CONTENTS);
   buf->dirpath = dirpath;
-}
-
-/* Common constructor for initializing spillbufs.
-   Used by svn_spillbuf__create, svn_spilbuff__reader_create. */
-static void
-init_spillbuf(svn_spillbuf_t *buf,
-              apr_size_t blocksize,
-              apr_size_t maxsize,
-              apr_pool_t *result_pool)
-{
-  init_spillbuf_extended(buf, blocksize, maxsize,
-                         TRUE, FALSE, NULL,
-                         result_pool);
+  return buf;
 }
 
 svn_spillbuf_t *
@@ -149,25 +134,11 @@ svn_spillbuf__create(apr_size_t blocksiz
                      apr_size_t maxsize,
                      apr_pool_t *result_pool)
 {
-  svn_spillbuf_t *buf = apr_pcalloc(result_pool, sizeof(*buf));
-  init_spillbuf(buf, blocksize, maxsize, result_pool);
-  return buf;
-}
-
-
-svn_spillbuf_t *
-svn_spillbuf__create_extended(apr_size_t blocksize,
-                              apr_size_t maxsize,
-                              svn_boolean_t delete_on_close,
-                              svn_boolean_t spill_all_contents,
-                              const char *dirpath,
-                              apr_pool_t *result_pool)
-{
-  svn_spillbuf_t *buf = apr_pcalloc(result_pool, sizeof(*buf));
-  init_spillbuf_extended(buf, blocksize, maxsize,
-                         delete_on_close, spill_all_contents, dirpath,
-                         result_pool);
-  return buf;
+  return svn_spillbuf__create_extended(
+      blocksize, maxsize,
+      SVN_SPILLBUF__DELETE_ON_CLOSE, /* flags */
+      NULL,                          /* dirpath */
+      result_pool);
 }
 
 svn_filesize_t

Modified: 
subversion/branches/better-pristines/subversion/tests/libsvn_subr/spillbuf-test.c
==============================================================================
--- 
subversion/branches/better-pristines/subversion/tests/libsvn_subr/spillbuf-test.c
   Fri Jan 16 18:45:02 2026        (r1931377)
+++ 
subversion/branches/better-pristines/subversion/tests/libsvn_subr/spillbuf-test.c
   Fri Jan 16 19:43:42 2026        (r1931378)
@@ -98,7 +98,10 @@ test_spillbuf_basic_spill_all(apr_pool_t
 {
   apr_size_t len = strlen(basic_data);  /* Don't include basic_data's NUL  */
   svn_spillbuf_t *buf =
-    svn_spillbuf__create_extended(len, 10 * len, TRUE, TRUE, NULL, pool);
+    svn_spillbuf__create_extended(len, 10 * len,
+                                  SVN_SPILLBUF__DELETE_ON_CLOSE
+                                  | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
+                                  NULL, pool);
   return test_spillbuf__basic(pool, len, buf);
 }
 
@@ -159,8 +162,8 @@ test_spillbuf_callback_spill_all(apr_poo
   svn_spillbuf_t *buf = svn_spillbuf__create_extended(
                           sizeof(basic_data) /* blocksize */,
                           10 * sizeof(basic_data) /* maxsize */,
-                          TRUE /* delte on close */,
-                          TRUE /* spill all data */,
+                          SVN_SPILLBUF__DELETE_ON_CLOSE
+                          | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
                           NULL, pool);
   return test_spillbuf__callback(pool, buf);
 }
@@ -247,8 +250,8 @@ test_spillbuf_file_spill_all(apr_pool_t
   svn_spillbuf_t *buf = svn_spillbuf__create_extended(
                           altsize /* blocksize */,
                           2 * sizeof(basic_data)  /* maxsize */,
-                          TRUE /* delte on close */,
-                          TRUE /* spill all data */,
+                          SVN_SPILLBUF__DELETE_ON_CLOSE
+                          | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
                           NULL, pool);
   return test_spillbuf__file(pool, altsize, buf);
 }
@@ -298,8 +301,8 @@ test_spillbuf_interleaving_spill_all(apr
   svn_spillbuf_t *buf = svn_spillbuf__create_extended(
                           8 /* blocksize */,
                           15 /* maxsize */,
-                          TRUE /* delte on close */,
-                          TRUE /* spill all data */,
+                          SVN_SPILLBUF__DELETE_ON_CLOSE
+                          | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
                           NULL, pool);
   return test_spillbuf__interleaving(pool, buf);
 }
@@ -433,8 +436,8 @@ test_spillbuf_rwfile_spill_all(apr_pool_
   svn_spillbuf_t *buf = svn_spillbuf__create_extended(
                           4 /* blocksize */,
                           10 /* maxsize */,
-                          TRUE /* delte on close */,
-                          TRUE /* spill all data */,
+                          SVN_SPILLBUF__DELETE_ON_CLOSE
+                          | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
                           NULL, pool);
   return test_spillbuf__rwfile(pool, buf);
 }
@@ -504,8 +507,8 @@ test_spillbuf_eof_spill_all(apr_pool_t *
   svn_spillbuf_t *buf = svn_spillbuf__create_extended(
                           4 /* blocksize */,
                           10 /* maxsize */,
-                          TRUE /* delte on close */,
-                          TRUE /* spill all data */,
+                          SVN_SPILLBUF__DELETE_ON_CLOSE
+                          | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
                           NULL, pool);
   return test_spillbuf__eof(pool, buf);
 }
@@ -552,8 +555,8 @@ test_spillbuf_file_attrs_spill_all(apr_p
   svn_spillbuf_t *buf = svn_spillbuf__create_extended(
                           4 /* blocksize */,
                           10 /* maxsize */,
-                          TRUE /* delte on close */,
-                          TRUE /* spill all data */,
+                          SVN_SPILLBUF__DELETE_ON_CLOSE
+                          | SVN_SPILLBUF__SPILL_ALL_CONTENTS,
                           NULL, pool);
   return test_spillbuf__file_attrs(pool, TRUE, buf);
 }

Reply via email to