Change the Archive_Tar _addFile function to make it possible to use a different filename

This commit is contained in:
Bart Visscher 2012-10-13 21:01:00 +02:00
parent 3fef4564f0
commit fea6ac46ef
1 changed files with 24 additions and 21 deletions

View File

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