svn commit: r1925671 - /subversion/trunk/subversion/libsvn_repos/config_file.c

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <[email protected]>
Author: brane
Date: Sun May 18 14:13:28 2025
New Revision: 1925671

URL: http://svn.apache.org/viewvc?rev=1925671&view=rev
Log:
Remove a duplicated stream implementation from libsvn_repos and replace
it with code that we already had in libsvn_subr when that representation
stream was first implemented.

* subversion/libsvn_repos/config_file.c
  (repr_stream_baton_t): New; replaces presentation_stream_baton_t.
  (lazyopen_repr_stream): New open function for lazyopen streams.
  (representation_stream): Return a lazyopen stream.
  (auto_open_inner_stream, read_handler_rep,
   skip_handler_rep, mark_handler_rep, seek_handler_rep,
   data_available_handler_rep, readline_handler_rep): Obsolete, removed.

Modified:
    subversion/trunk/subversion/libsvn_repos/config_file.c

Modified: subversion/trunk/subversion/libsvn_repos/config_file.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/config_file.c?rev=1925671&r1=1925670&r2=1925671&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/config_file.c (original)
+++ subversion/trunk/subversion/libsvn_repos/config_file.c Sun May 18 14:13:28 2025
@@ -55,114 +55,41 @@ struct config_access_t
  * delays accessing the repository data until the stream is first used.
  * IOW, the stream object is cheap as long as it is not accessed.
  */
-typedef struct presentation_stream_baton_t
+struct repr_stream_baton_t
 {
   svn_fs_root_t *root;
   const char *fs_path;
-  apr_pool_t *pool;
-  svn_stream_t *inner;
-} presentation_stream_baton_t;
+};
 
 static svn_error_t *
-auto_open_inner_stream(presentation_stream_baton_t *b)
+lazyopen_repr_stream(svn_stream_t **repr_stream, void *baton,
+                     apr_pool_t *result_pool, apr_pool_t *scratch_pool)
 {
-  if (!b->inner)
-    {
-      svn_filesize_t length;
-      svn_stream_t *stream;
-      svn_stringbuf_t *contents;
+  const struct repr_stream_baton_t *const b = baton;
+  svn_filesize_t length;
+  svn_stream_t *stream;
+  svn_stringbuf_t *contents;
 
-      SVN_ERR(svn_fs_file_length(&length, b->root, b->fs_path, b->pool));
-      SVN_ERR(svn_fs_file_contents(&stream, b->root, b->fs_path, b->pool));
-      SVN_ERR(svn_stringbuf_from_stream(&contents, stream,
-                                        (apr_size_t)length, b->pool));
-      b->inner = svn_stream_from_stringbuf(contents, b->pool);
-    }
+  SVN_ERR(svn_fs_file_length(&length, b->root, b->fs_path, scratch_pool));
+  SVN_ERR(svn_fs_file_contents(&stream, b->root, b->fs_path, scratch_pool));
+  SVN_ERR(svn_stringbuf_from_stream(&contents, stream,
+                                    (apr_size_t)length, result_pool));
 
+  *repr_stream = svn_stream_from_stringbuf(contents, result_pool);
   return SVN_NO_ERROR;
 }
 
-static svn_error_t *
-read_handler_rep(void *baton, char *buffer, apr_size_t *len)
-{
-  presentation_stream_baton_t *b = baton;
-  SVN_ERR(auto_open_inner_stream(b));
-
-  return svn_error_trace(svn_stream_read2(b->inner, buffer, len));
-}
-
-static svn_error_t *
-mark_handler_rep(void *baton, svn_stream_mark_t **mark, apr_pool_t *pool)
-{
-  presentation_stream_baton_t *b = baton;
-  SVN_ERR(auto_open_inner_stream(b));
-
-  return svn_error_trace(svn_stream_mark(b->inner, mark, pool));
-}
-
-static svn_error_t *
-seek_handler_rep(void *baton, const svn_stream_mark_t *mark)
-{
-  presentation_stream_baton_t *b = baton;
-  SVN_ERR(auto_open_inner_stream(b));
-
-  return svn_error_trace(svn_stream_seek(b->inner, mark));
-}
-
-static svn_error_t *
-skip_handler_rep(void *baton, apr_size_t len)
-{
-  presentation_stream_baton_t *b = baton;
-  SVN_ERR(auto_open_inner_stream(b));
-
-  return svn_error_trace(svn_stream_skip(b->inner, len));
-}
-
-static svn_error_t *
-data_available_handler_rep(void *baton, svn_boolean_t *data_available)
-{
-  presentation_stream_baton_t *b = baton;
-  SVN_ERR(auto_open_inner_stream(b));
-
-  return svn_error_trace(svn_stream_data_available(b->inner, data_available));
-}
-
-static svn_error_t *
-readline_handler_rep(void *baton,
-                        svn_stringbuf_t **stringbuf,
-                        const char *eol,
-                        svn_boolean_t *eof,
-                        apr_pool_t *pool)
-{
-  presentation_stream_baton_t *b = baton;
-  SVN_ERR(auto_open_inner_stream(b));
-
-  return svn_error_trace(svn_stream_readline(b->inner, stringbuf, eol, eof,
-                                             pool));
-}
-
 /* Return a lazy access stream for FS_PATH under ROOT, allocated in POOL. */
 static svn_stream_t *
 representation_stream(svn_fs_root_t *root,
                       const char *fs_path,
                       apr_pool_t *pool)
 {
-  svn_stream_t *stream;
-  presentation_stream_baton_t *baton;
-
-  baton = apr_pcalloc(pool, sizeof(*baton));
+  struct repr_stream_baton_t *const baton = apr_pcalloc(pool, sizeof(*baton));
   baton->root = root;
   baton->fs_path = fs_path;
-  baton->pool = pool;
-
-  stream = svn_stream_create(baton, pool);
-  svn_stream_set_read2(stream, read_handler_rep, read_handler_rep);
-  svn_stream_set_mark(stream, mark_handler_rep);
-  svn_stream_set_seek(stream, seek_handler_rep);
-  svn_stream_set_skip(stream, skip_handler_rep);
-  svn_stream_set_data_available(stream, data_available_handler_rep);
-  svn_stream_set_readline(stream, readline_handler_rep);
-  return stream;
+  return svn_stream_lazyopen_create(lazyopen_repr_stream, baton,
+                                    FALSE /*open_on_close*/, pool);
 }
 
 /* Handle the case of a file PATH / url pointing to anything that is either
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.