subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From i...@apache.org
Subject svn commit: r1701564 - /subversion/trunk/subversion/libsvn_subr/stream.c
Date Mon, 07 Sep 2015 07:15:25 GMT
Author: ivan
Date: Mon Sep  7 07:15:25 2015
New Revision: 1701564

URL: http://svn.apache.org/r1701564
Log:
Reduce difference between Windows and non-Windows implementation of
install_stream.

* subversion/libsvn_subr/stream.c
  (install_close): Remove #ifdef WIN32
  (svn_stream__create_for_install): Always setup flush on close stream
   handler.
  (svn_stream__install_stream): Close temporary file before rename on all
   platforms.
  (svn_stream__install_get_info): Obtain file info from file handle on all
   platforms.
  (svn_stream__install_delete): Close temporary file before delete on all
   platforms.

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

Modified: subversion/trunk/subversion/libsvn_subr/stream.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/stream.c?rev=1701564&r1=1701563&r2=1701564&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/stream.c (original)
+++ subversion/trunk/subversion/libsvn_subr/stream.c Mon Sep  7 07:15:25 2015
@@ -2181,6 +2181,8 @@ create_tempfile(HANDLE *hFile,
   return SVN_NO_ERROR;
 }
 
+#endif /* WIN32 */
+
 /* Implements svn_close_fn_t */
 static svn_error_t *
 install_close(void *baton)
@@ -2193,8 +2195,6 @@ install_close(void *baton)
   return SVN_NO_ERROR;
 }
 
-#endif /* WIN32 */
-
 svn_error_t *
 svn_stream__create_for_install(svn_stream_t **install_stream,
                                const char *tmp_abspath,
@@ -2249,12 +2249,8 @@ svn_stream__create_for_install(svn_strea
 
   ib->tmp_path = tmp_path;
 
-#ifdef WIN32
   /* Don't close the file on stream close; flush instead */
   svn_stream_set_close(*install_stream, install_close);
-#else
-  /* ### Install pool cleanup handler for tempfile? */
-#endif
 
   return SVN_NO_ERROR;
 }
@@ -2299,8 +2295,6 @@ svn_stream__install_stream(svn_stream_t
          svn_io_file_rename2(). */
       svn_error_clear(err);
       err = SVN_NO_ERROR;
-
-      SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
     }
   else
     {
@@ -2310,6 +2304,9 @@ svn_stream__install_stream(svn_stream_t
     }
 #endif
 
+  /* Close temporary file. */
+  SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
+
   err = svn_io_file_rename2(ib->tmp_path, final_abspath, FALSE, scratch_pool);
 
   /* A missing directory is too common to not cover here. */
@@ -2343,19 +2340,12 @@ svn_stream__install_get_info(apr_finfo_t
                              apr_pool_t *scratch_pool)
 {
   struct install_baton_t *ib = install_stream->baton;
-
-#ifdef WIN32
-  /* On WIN32 the file is still open, so we can obtain the information
-     from the handle without race conditions */
   apr_status_t status;
 
   status = apr_file_info_get(finfo, wanted, ib->baton_apr.file);
 
   if (status)
     return svn_error_wrap_apr(status, NULL);
-#else
-  SVN_ERR(svn_io_stat(finfo, ib->tmp_path, wanted, scratch_pool));
-#endif
 
   return SVN_NO_ERROR;
 }
@@ -2382,9 +2372,10 @@ svn_stream__install_delete(svn_stream_t
   /* Deleting file on close may be unsupported, so ignore errors and
      fallback to svn_io_remove_file2(). */
   svn_error_clear(err);
-  SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
 #endif
 
+  SVN_ERR(svn_io_file_close(ib->baton_apr.file, scratch_pool));
+
   return svn_error_trace(svn_io_remove_file2(ib->tmp_path, FALSE,
                                              scratch_pool));
 }



Mime
View raw message