]> source.dussan.org Git - nextcloud-server.git/commitdiff
Change the Archive_Tar _addFile function to make it possible to use a different filename
authorBart Visscher <bartv@thisnet.nl>
Sat, 13 Oct 2012 19:01:00 +0000 (21:01 +0200)
committerBart Visscher <bartv@thisnet.nl>
Sat, 13 Oct 2012 19:01:00 +0000 (21:01 +0200)
3rdparty/Archive/Tar.php

index 33c7d395d0978fcdd47ad4523ccf8814059d1f22..fd2d5d7d9b816ecc4a5f3caa4d358635a43e7566 100644 (file)
@@ -981,7 +981,7 @@ class Archive_Tar extends PEAR
     // }}}
 
     // {{{ _addFile()
-    function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir)
+    function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir, $v_stored_filename=null)
     {
       if (!$this->_file) {
           $this->_error('Invalid file descriptor');
@@ -993,28 +993,31 @@ class Archive_Tar extends PEAR
           return false;
       }
 
-      // ----- Calculate the stored filename
-      $p_filename = $this->_translateWinPath($p_filename, false);;
-      $v_stored_filename = $p_filename;
-      if (strcmp($p_filename, $p_remove_dir) == 0) {
-          return true;
-      }
-      if ($p_remove_dir != '') {
-          if (substr($p_remove_dir, -1) != '/')
-              $p_remove_dir .= '/';
+      // ownCloud change to make it possible to specify the filename to use
+      if(is_null($v_stored_filename)) {
+            // ----- Calculate the stored filename
+            $p_filename = $this->_translateWinPath($p_filename, false);
+            $v_stored_filename = $p_filename;
+            if (strcmp($p_filename, $p_remove_dir) == 0) {
+                return true;
+            }
+            if ($p_remove_dir != '') {
+                if (substr($p_remove_dir, -1) != '/')
+                    $p_remove_dir .= '/';
 
-          if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)
-              $v_stored_filename = substr($p_filename, strlen($p_remove_dir));
-      }
-      $v_stored_filename = $this->_translateWinPath($v_stored_filename);
-      if ($p_add_dir != '') {
-          if (substr($p_add_dir, -1) == '/')
-              $v_stored_filename = $p_add_dir.$v_stored_filename;
-          else
-              $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;
-      }
+                if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)
+                    $v_stored_filename = substr($p_filename, strlen($p_remove_dir));
+            }
+            $v_stored_filename = $this->_translateWinPath($v_stored_filename);
+            if ($p_add_dir != '') {
+                if (substr($p_add_dir, -1) == '/')
+                    $v_stored_filename = $p_add_dir.$v_stored_filename;
+                else
+                    $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;
+            }
 
-      $v_stored_filename = $this->_pathReduction($v_stored_filename);
+            $v_stored_filename = $this->_pathReduction($v_stored_filename);
+      }
 
       if ($this->_isArchive($p_filename)) {
           if (($v_file = @fopen($p_filename, "rb")) == 0) {