You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/02/14 11:28:16 UTC

svn commit: r1446103 - /subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c

Author: stefan2
Date: Thu Feb 14 10:28:16 2013
New Revision: 1446103

URL: http://svn.apache.org/r1446103
Log:
On the fsfs-format7 branch:   Minimize OS interaction and eliminate
double buffering in stringbuf_from_aprfile() in case the file size
is known.  I.e. don't attempt to read beyond EOF just to detect EOF etc.

* subversion/libsvn_subr/io.c
  (stringbuf_from_aprfile): use a single read request if filesize is known

Modified:
    subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c?rev=1446103&r1=1446102&r2=1446103&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c Thu Feb 14 10:28:16 2013
@@ -2187,7 +2187,19 @@ stringbuf_from_aprfile(svn_stringbuf_t *
         {
           apr_finfo_t finfo;
           if (! (status = apr_stat(&finfo, filename, APR_FINFO_MIN, pool)))
-            res_initial_len = (apr_size_t)finfo.size;
+            {
+              /* we've got the file length. Now, read it in one go. */
+              svn_boolean_t eof;
+              res_initial_len = (apr_size_t)finfo.size;
+              res = svn_stringbuf_create_ensure(res_initial_len, pool);
+              SVN_ERR(svn_io_file_read_full2(file, res->data,
+                                             res_initial_len, &res->len,
+                                             &eof, pool));
+              res->data[res->len] = 0;
+              
+              *result = res;
+              return SVN_NO_ERROR;
+            }
         }
     }