| Extracted from Pike v7.8 release 700 at 2013-06-08.

[Top]
Filesystem
Filesystem.Tar
Filesystem.Tar._Tar

# Method Filesystem.Tar._Tar()->extract()

Method extract

  `void extract(string src_dir, string dest_dir, void|string|function(string:int|string) filter, void|int flags)`

Description

  Extracts files from the tar file in sequential order.

Parameter `src_dir`

  The root directory in the tar file system to extract.

Parameter `dest_dir`

  The root directory in the real file system that will receive the contents of src_dir . It is assumed to exist and be writable.

Parameter `filter`

  A filter for the entries under src_dir to extract. If it's a string then it's taken as a glob pattern which is matched against the path below src_dir . That path always begins with a `/`. For directory entries it ends with a `/` too, otherwise not.

  If it's a function then it's called for every entry under src_dir , and those where it returns nonzero are extracted. The function receives the path part below src_dir as the first argument, which is the same as in the glob case above, and the stat struct as the second. If the function returns a string, it's taken as the path below dest_dir where this entry should be extracted (any missing directories are created automatically).

  If filter is zero, then everything below src_dir is extracted.

Parameter `flags`

  Bitfield of flags to control the extraction:

  `Filesystem.Tar.EXTRACT_SKIP_MODE` | Don't set any permission bits from the tar records.
  `Filesystem.Tar.EXTRACT_SKIP_EXT_MODE` | Don't set set-user-ID, set-group-ID, or sticky bits from the tar records.
  `Filesystem.Tar.EXTRACT_SKIP_MTIME` | Don't set mtime from the tar records.
  `Filesystem.Tar.EXTRACT_CHOWN` | Set owning user and group from the tar records.
  `Filesystem.Tar.EXTRACT_ERR_ON_UNKNOWN` | Throw an error if an entry of an unsupported type is encountered. This is ignored otherwise.

  Files and directories are supported on all platforms, and symlinks are supported whereever symlink exists. Other record types are currently not supported.

Throws

  I/O errors are thrown.