original_string: protected function close_current_file($handler) {
          if ($this->currentfp !== null) {
              if (!fclose($this->currentfp)) {
                  throw new moodle_exception('errorprocessingarchive', '', '', null,
                          'Failed to close output file: ' .  $this->currentfile);
              }
  
              // At this point we should touch the file to set its modified
              // time to $this->currentmtime. However, when extracting to the
              // temp directory, cron will delete files more than a week old,
              // so to avoid problems we leave all files at their current time.
          }
  
          if ($this->currentarchivepath === tgz_packer::ARCHIVE_INDEX_FILE) {
              if ($this->mode === self::MODE_LIST) {
                  // When listing array, use the archive index to produce the list.
                  $index = file($this->currentfile);
                  $ok = true;
                  foreach ($index as $num => $value) {
                      // For first line (header), check it's valid then skip it.
                      if ($num == 0) {
                          if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) . '~', $value)) {
                              continue;
                          } else {
                              // Not valid, better ignore the file.
                              $ok = false;
                              break;
                          }
                      }
                      // Split on tabs and store in results array.
                      $values = explode("\t", trim($value));
                      $this->listresults[] = (object)array(
                          'original_pathname' => $values[0],
                          'pathname' => $values[0],
                          'mtime' => ($values[3] === '?' ? tgz_packer::DEFAULT_TIMESTAMP : (int)$values[3]),
                          'is_directory' => $values[1] === 'd',
                          'size' => (int)$values[2]);
                  }
                  if ($ok) {
                      $this->mode = self::MODE_LIST_COMPLETE;
                  }
                  unlink($this->currentfile);
              } else {
                  // For index file, get number of files and delete temp file.
                  $contents = file_get_contents($this->currentfile, null, null, null, 128);
                  $matches = array();
                  if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) .
                          '([0-9]+)~', $contents, $matches)) {
                      $this->numfiles = (int)$matches[1];
                  }
                  unlink($this->currentfile);
              }
          } else {
              // Report to handler and put in results.
              if ($this->currentfp !== null) {
                  $handler->tgz_end_file($this->currentarchivepath, $this->currentfile);
                  $this->results[$this->currentarchivepath] = true;
              }
              $this->donefiles++;
          }
  
          // No longer have a current file.
          $this->currentfp = null;
          $this->currentfile = null;
          $this->currentarchivepath = null;
      }
code: protected function close_current_file($handler) {
          if ($this->currentfp !== null) {
              if (!fclose($this->currentfp)) {
                  throw new moodle_exception('errorprocessingarchive', '', '', null,
                          'Failed to close output file: ' .  $this->currentfile);
              }
  
              // At this point we should touch the file to set its modified
              // time to $this->currentmtime. However, when extracting to the
              // temp directory, cron will delete files more than a week old,
              // so to avoid problems we leave all files at their current time.
          }
  
          if ($this->currentarchivepath === tgz_packer::ARCHIVE_INDEX_FILE) {
              if ($this->mode === self::MODE_LIST) {
                  // When listing array, use the archive index to produce the list.
                  $index = file($this->currentfile);
                  $ok = true;
                  foreach ($index as $num => $value) {
                      // For first line (header), check it's valid then skip it.
                      if ($num == 0) {
                          if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) . '~', $value)) {
                              continue;
                          } else {
                              // Not valid, better ignore the file.
                              $ok = false;
                              break;
                          }
                      }
                      // Split on tabs and store in results array.
                      $values = explode("\t", trim($value));
                      $this->listresults[] = (object)array(
                          'original_pathname' => $values[0],
                          'pathname' => $values[0],
                          'mtime' => ($values[3] === '?' ? tgz_packer::DEFAULT_TIMESTAMP : (int)$values[3]),
                          'is_directory' => $values[1] === 'd',
                          'size' => (int)$values[2]);
                  }
                  if ($ok) {
                      $this->mode = self::MODE_LIST_COMPLETE;
                  }
                  unlink($this->currentfile);
              } else {
                  // For index file, get number of files and delete temp file.
                  $contents = file_get_contents($this->currentfile, null, null, null, 128);
                  $matches = array();
                  if (preg_match('~^' . preg_quote(tgz_packer::ARCHIVE_INDEX_COUNT_PREFIX) .
                          '([0-9]+)~', $contents, $matches)) {
                      $this->numfiles = (int)$matches[1];
                  }
                  unlink($this->currentfile);
              }
          } else {
              // Report to handler and put in results.
              if ($this->currentfp !== null) {
                  $handler->tgz_end_file($this->currentarchivepath, $this->currentfile);
                  $this->results[$this->currentarchivepath] = true;
              }
              $this->donefiles++;
          }
  
          // No longer have a current file.
          $this->currentfp = null;
          $this->currentfile = null;
          $this->currentarchivepath = null;
      }
code_tokens: protected function close_current_file ( $ handler ) { if ( $ this -> currentfp !== null ) { if ( ! fclose ( $ this -> currentfp ) ) { throw new moodle_exception ( 'errorprocessingarchive' , '' , '' , null , 'Failed to close output file: ' . $ this -> currentfile ) ; } // At this point we should touch the file to set its modified // time to $this->currentmtime. However, when extracting to the // temp directory, cron will delete files more than a week old, // so to avoid problems we leave all files at their current time. } if ( $ this -> currentarchivepath === tgz_packer :: ARCHIVE_INDEX_FILE ) { if ( $ this -> mode === self :: MODE_LIST ) { // When listing array, use the archive index to produce the list. $ index = file ( $ this -> currentfile ) ; $ ok = true ; foreach ( $ index as $ num => $ value ) { // For first line (header), check it's valid then skip it. if ( $ num == 0 ) { if ( preg_match ( '~^' . preg_quote ( tgz_packer :: ARCHIVE_INDEX_COUNT_PREFIX ) . '~' , $ value ) ) { continue ; } else { // Not valid, better ignore the file. $ ok = false ; break ; } } // Split on tabs and store in results array. $ values = explode ( "\t" , trim ( $ value ) ) ; $ this -> listresults [ ] = ( object ) array ( 'original_pathname' => $ values [ 0 ] , 'pathname' => $ values [ 0 ] , 'mtime' => ( $ values [ 3 ] === '?' ? tgz_packer :: DEFAULT_TIMESTAMP : ( int ) $ values [ 3 ] ) , 'is_directory' => $ values [ 1 ] === 'd' , 'size' => ( int ) $ values [ 2 ] ) ; } if ( $ ok ) { $ this -> mode = self :: MODE_LIST_COMPLETE ; } unlink ( $ this -> currentfile ) ; } else { // For index file, get number of files and delete temp file. $ contents = file_get_contents ( $ this -> currentfile , null , null , null , 128 ) ; $ matches = array ( ) ; if ( preg_match ( '~^' . preg_quote ( tgz_packer :: ARCHIVE_INDEX_COUNT_PREFIX ) . '([0-9]+)~' , $ contents , $ matches ) ) { $ this -> numfiles = ( int ) $ matches [ 1 ] ; } unlink ( $ this -> currentfile ) ; } } else { // Report to handler and put in results. if ( $ this -> currentfp !== null ) { $ handler -> tgz_end_file ( $ this -> currentarchivepath , $ this -> currentfile ) ; $ this -> results [ $ this -> currentarchivepath ] = true ; } $ this -> donefiles ++ ; } // No longer have a current file. $ this -> currentfp = null ; $ this -> currentfile = null ; $ this -> currentarchivepath = null ; }
docstring: Closes the current file, calls handler, and sets up data.
  
  @param tgz_extractor_handler $handler Will be called for extracted files
  @throws moodle_exception If there is an error closing it
docstring_tokens: Closes the current file calls handler and sets up data .