|
|
@@ -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) { |