From fea6ac46ef8d49ce5860979b02faeb60be845865 Mon Sep 17 00:00:00 2001
From: Bart Visscher <bartv@thisnet.nl>
Date: Sat, 13 Oct 2012 21:01:00 +0200
Subject: [PATCH] Change the Archive_Tar _addFile function to make it possible
 to use a different filename

---
 3rdparty/Archive/Tar.php | 45 +++++++++++++++++++++-------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/3rdparty/Archive/Tar.php b/3rdparty/Archive/Tar.php
index 33c7d395d0..fd2d5d7d9b 100644
--- a/3rdparty/Archive/Tar.php
+++ b/3rdparty/Archive/Tar.php
@@ -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) {
-- 
GitLab