function Archive_Tar::_pathReduction

7.x system.tar.inc Archive_Tar::_pathReduction($p_dir)

Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", rand emove double slashes.

@access private

Parameters

string $p_dir path to reduce:

Return value

string reduced path

3 calls to Archive_Tar::_pathReduction()
Archive_Tar::_addFile in drupal-7.x/modules/system/system.tar.inc
Archive_Tar::_writeHeader in drupal-7.x/modules/system/system.tar.inc
Archive_Tar::_writeHeaderBlock in drupal-7.x/modules/system/system.tar.inc

File

drupal-7.x/modules/system/system.tar.inc, line 1836

Class

Archive_Tar
Creates a (compressed) Tar archive *

Code

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 : '');
      }
    }
  }
  $v_result = strtr($v_result, '\\', '/');
  return $v_result;
}