<commit_before><?php
/*
 * $Id$
 *
 * Diese Klasse ist Bestandteil des XP-Frameworks
 * (c) 2001 <NAME>, Schlund+Partner AG
 *
 * @see http://doku.elite.schlund.de/projekte/xp/skeleton/
 *
 */
 
  uses('util.archive.TarArchiveEntry');

  /**
   * Kapselt ein Tar-Archiv
   *
   * Usage:
   * <code>
   * $a= &new TarArchive(new File('foo.tar.gz'));
   * $a->open(FILE_MODE_READ);
   * $e= &$a->getEntry();
   * $a->close();
   *
   * printf("Filesize of entry %s is %d bytes\n", $entry->name, $entry->size);
   * </code>
   *
   * @see http://www.gnu.org/software/tar/tar.html
   */
  class TarArchive extends Object {
    var
      $file;
    
    /**
     * Constructor
     *
     * @access  public
     * @param   io.File file File-Objekt
     */  
    function __construct($file) {
      $this->file= $file;
      parent::__construct();
    }
    
    /**
     * ffnen
     *
     * @access  public
     * @param   mixed args Argumente fr die open()-Method des Datei-Objekts
     * @return  bool Das Ergebnis der open()-Method des Datei-Objekts
     */
    function open() {
      $args= func_get_args();
      return call_user_func_array(
        array(&$this->file, 'open'), 
        $args
      );
    }
    
    /**
     * Schlieen
     *
     * @access  public
     * @return  bool Das Ergebnis der close()-Method des Datei-Objekts
     */
    function close() {
      return $this->file->close();
    }
    
    /**
     * Holt sich den nchsten Eintrag aus dem Archiv
     *
     * @access  public
     * @return  io.TarArchiveEntry Eintrag 
     */
    function getEntry() {
      static $size= 0;
      
      // Am EOF nicht mehr weiterlesen
      if ($this->file->eof()) return FALSE;

      // Zur nchsten Datei vorwrts lesen
      $this->file->seek($this->file->tell()+ ceil($size / 512) * 512);
      
      // Header lesen
      $bin= $this->file->read(512);
      $data= unpack(
        'a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', 
        $bin
      );
      if ('' == trim($data['filename'])) return FALSE;
      
      // TarArchiveEntry-Objekt erzeugen
      $f= new TarArchiveEntry(
        $data, 
        $this->file->tell()
      );
      
      // Gre merken, damit beim nchsten Aufruf dieser Funktion automatisch geseek()ed wird
      $size= $f->size;
      
      return $f;
    }
    
    /**
     * Inhalt einer Datei zurckgeben
     *
     * @access  public
     * @param   io.TarArchiveEntry e TarArchvieEntry-Objekt
     * @return  string content
     */
    function getEntryData($e) {
      $this->file->seek($e->offset);
      $content= $this->file->read($e->size);
      $this->file->seek($e->offset);
      return $content;
    }
  }
?>
<commit_msg>- Update file header<commit_after><?php
/* This class is part of the XP framework
 *
 * $Id$
 */
 
  uses('util.archive.TarArchiveEntry');

  /**
   * Kapselt ein Tar-Archiv
   *
   * Usage:
   * <code>
   * $a= &new TarArchive(new File('foo.tar.gz'));
   * $a->open(FILE_MODE_READ);
   * $entry= &$a->getEntry();
   * $a->close();
   *
   * printf("Filesize of entry %s is %d bytes\n", $entry->name, $entry->size);
   * </code>
   *
   * @see http://www.gnu.org/software/tar/tar.html
   */
  class TarArchive extends Object {
    var
      $file;
    
    /**
     * Constructor
     *
     * @access  public
     * @param   io.File file File-Objekt
     */  
    function __construct($file) {
      $this->file= $file;
      parent::__construct();
    }
    
    /**
     * ffnen
     *
     * @access  public
     * @param   mixed args Argumente fr die open()-Method des Datei-Objekts
     * @return  bool Das Ergebnis der open()-Method des Datei-Objekts
     */
    function open() {
      $args= func_get_args();
      return call_user_func_array(
        array(&$this->file, 'open'), 
        $args
      );
    }
    
    /**
     * Schlieen
     *
     * @access  public
     * @return  bool Das Ergebnis der close()-Method des Datei-Objekts
     */
    function close() {
      return $this->file->close();
    }
    
    /**
     * Holt sich den nchsten Eintrag aus dem Archiv
     *
     * @access  public
     * @return  io.TarArchiveEntry Eintrag 
     */
    function getEntry() {
      static $size= 0;
      
      // Am EOF nicht mehr weiterlesen
      if ($this->file->eof()) return FALSE;

      // Zur nchsten Datei vorwrts lesen
      $this->file->seek($this->file->tell()+ ceil($size / 512) * 512);
      
      // Header lesen
      $bin= $this->file->read(512);
      $data= unpack(
        'a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', 
        $bin
      );
      if ('' == trim($data['filename'])) return FALSE;
      
      // TarArchiveEntry-Objekt erzeugen
      $f= new TarArchiveEntry(
        $data, 
        $this->file->tell()
      );
      
      // Gre merken, damit beim nchsten Aufruf dieser Funktion automatisch geseek()ed wird
      $size= $f->size;
      
      return $f;
    }
    
    /**
     * Inhalt einer Datei zurckgeben
     *
     * @access  public
     * @param   io.TarArchiveEntry e TarArchvieEntry-Objekt
     * @return  string content
     */
    function getEntryData($e) {
      $this->file->seek($e->offset);
      $content= $this->file->read($e->size);
      $this->file->seek($e->offset);
      return $content;
    }
  }
?>

{'fraction_non_alphanumeric': 0.1506398537477148, 'fraction_numerical': 0.012797074954296161, 'mean_word_length': 1.9669197396963123, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 68, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5384385', 'n_tokens_mistral': 1990, 'n_tokens_neox': 1920, 'n_words': 386}