You are here

private function ArchiveTar::_extractInString 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::_extractInString()

This method extract from the archive one file identified by $p_filename. The return value is a string with the file content, or null on error.

Parameters

string $p_filename The path of the file to extract in a string.:

Return value

a string with the file content or null.

1 call to ArchiveTar::_extractInString()
ArchiveTar::extractInString in core/lib/Drupal/Core/Archiver/ArchiveTar.php
This method extract from the archive one file identified by $p_filename. The return value is a string with the file content, or NULL on error.

File

core/lib/Drupal/Core/Archiver/ArchiveTar.php, line 1860

Class

ArchiveTar

Namespace

Drupal\Core\Archiver

Code

private function _extractInString($p_filename) {
  $v_result_str = "";
  while (strlen($v_binary_data = $this
    ->_readBlock()) != 0) {
    if (!$this
      ->_readHeader($v_binary_data, $v_header)) {
      return null;
    }
    if ($v_header['filename'] == '') {
      continue;
    }

    // ----- Look for long filename
    if ($v_header['typeflag'] == 'L') {
      if (!$this
        ->_readLongHeader($v_header)) {
        return null;
      }
    }
    if ($v_header['filename'] == $p_filename) {
      if ($v_header['typeflag'] == "5") {
        $this
          ->_error('Unable to extract in string a directory ' . 'entry {' . $v_header['filename'] . '}');
        return null;
      }
      else {
        $n = floor($v_header['size'] / 512);
        for ($i = 0; $i < $n; $i++) {
          $v_result_str .= $this
            ->_readBlock();
        }
        if ($v_header['size'] % 512 != 0) {
          $v_content = $this
            ->_readBlock();
          $v_result_str .= substr($v_content, 0, $v_header['size'] % 512);
        }
        return $v_result_str;
      }
    }
    else {
      $this
        ->_jumpBlock(ceil($v_header['size'] / 512));
    }
  }
  return null;
}