private function ArchiveTar::_pathReduction in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/lib/Drupal/Core/Archiver/ArchiveTar.php \Drupal\Core\Archiver\ArchiveTar::_pathReduction()
Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", rand emove double slashes.
Parameters
string $p_dir path to reduce:
Return value
string reduced path
3 calls to ArchiveTar::_pathReduction()
- ArchiveTar::_addFile in core/
lib/ Drupal/ Core/ Archiver/ ArchiveTar.php - ArchiveTar::_writeHeader in core/
lib/ Drupal/ Core/ Archiver/ ArchiveTar.php - ArchiveTar::_writeHeaderBlock in core/
lib/ Drupal/ Core/ Archiver/ ArchiveTar.php
File
- core/
lib/ Drupal/ Core/ Archiver/ ArchiveTar.php, line 2393
Class
Namespace
Drupal\Core\ArchiverCode
private function _pathReduction($p_dir) {
$v_result = '';
// ----- Look for not empty path
if ($p_dir != '') {
// ----- Explode path by directory names
$v_list = explode('/', $p_dir);
// ----- Study directories from last to first
for ($i = sizeof($v_list) - 1; $i >= 0; $i--) {
// ----- Look for current path
if ($v_list[$i] == ".") {
// ----- Ignore this directory
// Should be the first $i=0, but no check is done
}
else {
if ($v_list[$i] == "..") {
// ----- Ignore it and ignore the $i-1
$i--;
}
else {
if ($v_list[$i] == '' && $i != sizeof($v_list) - 1 && $i != 0) {
// ----- Ignore only the double '//' in path,
// but not the first and last /
}
else {
$v_result = $v_list[$i] . ($i != sizeof($v_list) - 1 ? '/' . $v_result : '');
}
}
}
}
}
if (defined('OS_WINDOWS') && OS_WINDOWS) {
$v_result = strtr($v_result, '\\', '/');
}
return $v_result;
}