You are here

private function ArchiveTar::_pathReduction in Zircon Profile 8

Same name and namespace in other branches
  1. 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

ArchiveTar

Namespace

Drupal\Core\Archiver

Code

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;
}