unzip610a.ann Notes on the UnZip 6.10a beta release
unzip610b.ann Notes on the UnZip 6.10b beta release
unzip610c.ann Notes on the UnZip 6.10c beta release
+zip-comment.txt Source kit archive comment
proginfo/ Programming docs, additional technical info, contributor list
User Program Documentation ("man"/help formatted output)
(extract.c, fileio.c, globals.h, process.c, unzpriv.h,
win32/w32cfg.h, win32/win32.c, windll/windll.c, zipinfo.c) [SMS]
+6.10c13 (17 Dec 2014):
+ - No news.
+
Bugs fixed:
6.10c12 (11 Nov 2014):
- No news.
+6.10c13 (26 Dec 2014):
+ - Fixed some buffer-overflow problems reported by oCERT (oCERT.org),
+ involving corrupt/malicious archives. Added some warning messages
+ where corruption was detected. (extract.c, fileio.c, process.c)
+ [SMS]
+ - Unix builder was using the wrong linker flags variable names, which
+ could cause user-specified values to be ignored. (unix/Makefile)
+ [SMS]
+ - VMS MMS/MMK builder used some DCL symbols which could be
+ (mis-)interpreted as MMS macros, causing various build problems.
+ These now have names ending in "_dcl_sym", which sould avoid such
+ collisions. (vms/descrip_src.mms) [SMS]
+ - UnZip could erroneously report "bad AES_WG MAC" for valid data (when
+ AES_WG encryption was used). (extract.c) [SMS]
+ - Code tidying. Moved a VMS-specific variable (terminal echo state)
+ from local static storage into the (dynamic) global data structure.
+ (globals.c, globals.h, ttyio.c) [SMS]
+++ /dev/null
-1 UnZip\r
-\r
- UnZip lists, tests, or extracts files from a ZIP archive (an archive\r
- format commonly used on many different systems). The default\r
- behavior (with no options) is to extract into the current directory\r
- (and subdirectories below it) all files from the specified ZIP\r
- archive. A companion program, Zip, creates ZIP archives.\r
-\r
- Info-ZIP UnZip and Zip were intended to be compatible with archives\r
- created by PKWARE's PKZIP and PKUNZIP programs (originally for\r
- MS-DOS), but in many cases the program options or default behaviors\r
- differ. Nowadays, many other programs are available which work with\r
- ZIP archives.\r
-\r
- This help file describes the Unix-style command-line edition of\r
- UnZip. A VMS CLI edition is also available, with a separate help\r
- file.\r
-\r
- Format\r
-\r
- unzip [ unzip_options ] [ file[.zip] ] [ member ... ]\r
- unzip -Z [ zipinfo_options ] [ file[.zip] ] [ member ... ]\r
-\r
- Note: Beginning with UnZip version 6.10, the old command-line\r
- parser has been replaced by one like the one used in Zip. One\r
- significant change is that option negation now uses a TRAILING\r
- hyphen ("-"), so, for example, -B- negates the -B option. This\r
- change was made because a double hyphen ("--") now introduces a long\r
- option.\r
-\r
- To display the basic built-in help, use the command:\r
- unzip -h\r
-\r
- To display the extended built-in help, use the command:\r
- unzip -hh\r
-\r
- The built-in help may be more current than this help file,\r
- especially between full product releases.\r
-\r
- To list all available options for a particular UnZip program, use\r
- the command:\r
- unzip --show-options\r
-\r
- This report will not include any options which are available only on\r
- other system types, or options which must be enabled at build-time\r
- but were not enabled in the particular UnZip program being used.\r
-2 Command_Parameters\r
-\r
-file[.zip]\r
-\r
- File path/name of a ZIP archive. A wildcard name may be used to\r
- specify multiple ZIP archives to be processed in one command. On\r
- VMS systems, any of the standard wildcards for a directory/file\r
- specification may be used: "...", "*", or "%" (or, since VMS V7.2,\r
- "?"). The default archive file specification is ".ZIP".\r
-\r
- Note that a ".zip" or ".ZIP" file type on an archive is merely a\r
- convention, not a requirement. For example, a self-extracting ZIP\r
- archive named "fred" or "fred.exe" could be processed as if it were\r
- an ordinary archive; just specify the actual file name with its\r
- actual name ending (if any), whatever that may be.\r
-\r
-member ...\r
-\r
- An optional list of archive members to be processed, separated by\r
- spaces. If no member list is specified, then all archive members\r
- are processed. Unix-like ("globbing") wildcard patterns may be used\r
- to match multiple members:\r
-\r
- * Matches a sequence of 0 or more characters.\r
- ? Matches exactly 1 character.\r
- [...] Matches any single character found inside the brackets.\r
- Ranges are specified by a beginning character, a hyphen, and\r
- an ending character. If an exclamation point ("!") or a\r
- caret ("^") follows the left bracket, then the range of\r
- characters within the brackets is complemented. That is,\r
- anything except the characters inside the brackets is\r
- considered a match. To specify a literal left bracket, use\r
- the three-character sequence "[[]".\r
-2 Options_Primary_Mode\r
- Options in this group specify the primary mode of operation of\r
- UnZip. Only one of these primary mode options may be specified.\r
-\r
- Note that uppercase options (like -T) must be specified in quotes\r
- (unless SET PROCESS/PARSE_STYLE=EXTENDED is set). For example:\r
-\r
- unzip "-VX" -a zipfile\r
-3 -c\r
--c\r
---to-stdout\r
-\r
- Primary Mode. Extract files to stdout/screen. This option is\r
- similar to the -p option except that the name of each file is\r
- displayed as it is extracted, and the -a option is allowed, which\r
- can provide automatic ASCII-EBCDIC conversion, where appropriate.\r
-3 -f\r
--f\r
---freshen\r
-\r
- Primary Mode. Freshen existing files. That is, extract only those\r
- files that already exist on disk and that are newer than the disk\r
- copies. By default UnZip queries before overwriting, but the -o\r
- option may be used to suppress the queries.\r
-3 -h\r
--h\r
---help\r
-\r
- Primary Mode. Display brief (roughly 24 lines) usage instructions.\r
- See also -hh.\r
-3 -hh\r
--hh\r
---long-help\r
-\r
- Primary Mode. Display extended help (more complete usage\r
- instructions). See also -h.\r
-3 -l\r
--l\r
---list\r
-\r
- Primary Mode. List archive members. By default, a brief format is\r
- used, which includes the following items: member name, uncompressed\r
- file size ("Length"), and modification date-time of the member. A\r
- summary is included at the end of the report, showing total size and\r
- count for all the members in the report. Specifying a member list\r
- limits the report to those members.\r
-\r
- Adding -v (--verbose) to an "unzip -l" command line adds the\r
- following items to the report: compression method, compressed size\r
- ("Size"), compression ratio, and 32-bit CRC.\r
-\r
- In contrast to some other programs, UnZip does not include the\r
- 12-byte encryption header in the compressed size values for a\r
- Traditionally encrypted member. Therefore, compressed size and\r
- compression ratio figures are independent of the member's encryption\r
- status and show the correct compression performance. (The complete\r
- size of the encrypted compressed data stream for archive members is\r
- reported by the more verbose ZipInfo reports. See ZipInfo.\r
-\r
- If UnZip was built with OS2_EAS enabled, then the -l report also\r
- includes the sizes of stored OS/2 extended attributes (EAs) and OS/2\r
- access control lists (ACLs). In addition, the archive comment and\r
- individual member comments (if any) are displayed.\r
-\r
- If a file was archived from a single-case file system (for example,\r
- the old MS-DOS FAT file system) and the -L option was given, the\r
- filename is converted to lowercase and is shown prefixed with a\r
- caret (^).\r
-\r
- Note: If only -v (--verbose) is specified with an archive name,\r
- then UnZip acts as if "-l -v" were specified, and a detailed listing\r
- is generated.\r
-3 --license\r
-\r
- Primary Mode. Display the Info-ZIP license.\r
-3 -p\r
--p\r
---pipe-to-stdout\r
-\r
- Primary Mode. Extract files to stdout (pipe). Only the actual file\r
- data for the members are sent to stdout (no file names, or other\r
- information, as would be displayed with -c, and the files are always\r
- extracted in binary format, just as they are stored (no\r
- conversions).\r
-3 -T\r
--T\r
---timestamp-new\r
-\r
- Primary Mode. Set the timestamp on the archive(s) to that of the\r
- newest file in each one. This corresponds to Zip's -go option,\r
- except that it can be used on wildcard archives (for example, "unzip\r
- -T *.zip"), and is much faster.\r
-3 -t\r
--t\r
---test\r
-\r
- Primary Mode. Test archive members. Testing means that each\r
- archive member is extracted in memory (expanding and decrypting, as\r
- needed), but not written to a file. The resulting CRC (cyclic\r
- redundancy check, an enhanced checksum) of the extracted data is\r
- then compared with the original file's stored CRC value, and an\r
- error message is emitted if a CRC mismatch is detected.\r
-\r
- Adding -v to -t adds some diagnostic information to the report for\r
- archive members with LZMA or PPMd compression.\r
-3 -u\r
--u\r
---update\r
-\r
- Primary mode. Update existing files and create new ones if needed.\r
- This mode performs the same function as the Freshen (-f) mode,\r
- extracting (with query) files that are newer than those with the\r
- same name on disk, but it also extracts those files that do not\r
- already exist on disk.\r
-3 -v\r
--v\r
---verbose\r
-\r
- Primary mode (when alone) or option. When used as a primary mode\r
- (alone), and no archive is specified, an "unzip -v" command\r
- generates a report showing the program version, build options, and\r
- relevant envrironment variables.\r
-\r
- When used with some other primary mode option, -v can make output\r
- more verbose (detailed).\r
-\r
- If no other primary mode is specified, and an archive is specified,\r
- then UnZip acts as if "-l -v" were specified, and a detailed listing\r
- is generated. See -l.\r
-3 -z\r
--z\r
---zipfile-comment\r
-\r
- Primary mode. Display only the archive comment.\r
-2 Options_Ordinary\r
- Options in this group modify the operation of UnZip.\r
-\r
- Note that uppercase options (like -V) must be specified in quotes\r
- (unless SET PROC/PARSE=EXTEND is set). For example:\r
-\r
- unzip "-VX" -a zipfile\r
-\r
-3 -2\r
--2\r
---force-ods2\r
-\r
- [VMS] Convert extracted file names to ODS2-compatible names, even on\r
- an ODS5 file system. By default, if the destination file system is\r
- ODS5, case is preserved, and extended file name characters are\r
- caret-escaped as needed, while if the destination file system is\r
- ODS2, invalid characters are replaced by underscores.\r
-3 -A\r
--A\r
---api-help\r
-\r
- [OS/2, Unix DLL] Print extended help for the DLL's application\r
- programming interface (API).\r
-3 -a\r
--a\r
---ascii\r
-\r
- Convert text files. Ordinarily, all files are extracted exactly as\r
- they are stored, byte-for-byte. With -a, line endings in a text\r
- file are adjusted to the local standard as the file is extracted.\r
- When appropriate, ASCII<-->EBCDIC conversion is also done.\r
-\r
- Zip (or a similar archiving program) identifies files as "binary" or\r
- "text" when they are archived. (A short-format ZipInfo report\r
- denotes a binary file with a "b", and a text file with a "t".) Zip's\r
- identification of text files may not be perfect, so UnZip prints\r
- "[binary]" or "[text]" as a visual check for each file it extracts\r
- with -a. The -aa option forces all files to be extracted (and\r
- converted) as text, regardless of the supposed file type.\r
-\r
- [VMS] On VMS, for archives with VMS attribute information (made with\r
- "zip -V"), files are always created with their original record\r
- formats. For archives without VMS attribute information (not made\r
- with "zip -V"), all files are normally created with Stream_LF record\r
- format. With -a, text files are normally created with\r
- variable-length record format, but adding -S gives them Stream_LF\r
- record format. With -aa, all files are treated as text files. See\r
- also -b and -S.\r
-3 -B\r
--B\r
---backup\r
-\r
- [when built with UNIXBACKUP enabled] Save a backup copy of each\r
- overwritten file. The backup file gets the name of the target file\r
- with a tilde and optionally a unique sequence number (up to 5\r
- digits) appended. The sequence number is appended whenever another\r
- file with the original name plus tilde already exists. When used\r
- together with the "overwrite all" option, -o, numbered backup files\r
- are never created. In this case, all backup files are named as the\r
- original file with an appended tilde, and existing backup files are\r
- deleted without notice. This feature works similarly to the default\r
- behavior of emacs(1) in many locations.\r
-\r
- Example: the old copy of "foo" is renamed to "foo~".\r
-\r
- Warning: Users should be aware that the -B option does not prevent\r
- loss of existing data under all circumstances. For example, when\r
- UnZip is run in overwrite-all mode, an existing "foo~" file is\r
- deleted before UnZip attempts to rename "foo" to "foo~". When this\r
- rename attempt fails (because of a file lock, insufficient\r
- privileges, or any other reason), the extraction of "foo~" gets\r
- cancelled, but the old backup file is already lost. A similar\r
- scenario takes place when the sequence number range for numbered\r
- backup files gets exhausted (99999, or 65535 for 16-bit systems).\r
- In this case, the backup file with the maximum sequence number is\r
- deleted and replaced by the new backup version without notice.\r
-3 -b\r
--b\r
---binary\r
-\r
- [Tandem, VMS] Selects the file record format used when extracting\r
- binary files. -b may conflict or interact with -a in different ways\r
- on different system types. -b is ignored on systems other than\r
- Tandem and VMS.\r
-\r
- Zip (or a similar archiving program) identifies files as "binary" or\r
- "text" when they are archived. (A short-format ZipInfo report\r
- denotes a binary file with a "b", and a text file with a "t".)\r
-\r
- [Tandem] Force the creation files with filecode type 180 ('C') when\r
- extracting archive members marked as "text". (On Tandem, -a is\r
- enabled by default, see above).\r
-\r
- [VMS] On VMS, for archives with VMS attribute information (made with\r
- "zip -V"), files are always created with their original record\r
- formats. For archives without VMS attribute information (not made\r
- with "zip -V"), files are normally created with Stream_LF record\r
- format. With -b, binary files are created with fixed-length,\r
- 512-byte record format. With -bb, all files are created with\r
- fixed-length, 512-byte record format. When extracting to standard\r
- output (-c or -p option in effect), the default conversion of text\r
- record delimiters is disabled for binary files (with -b), or for all\r
- files (with -bb).\r
-3 -C\r
--c\r
---ignore-case ([CMS, MVS] --CMS-MVS-lower)\r
-\r
- Use case-insensitive name matching for names in the member list and\r
- the -x excluded-member list on the command line. By default,\r
- case-sensitive matching is done. For example, specifying "makefile"\r
- on the command line will match only "makefile" in the archive, not\r
- "Makefile" or "MAKEFILE". On many systems, the local file system is\r
- case-insensitive, so case-insensitive name matching would be more\r
- natural. With -C, "makefile" would match "makefile", "Makefile", or\r
- "MAKEFILE".\r
-\r
- -C does not affect the search for the ZIP archive file(s), nor the\r
- matching of archive members to existing files on the extraction\r
- path. So, on a case-sensitive file system, UnZip will never try to\r
- overwrite a file "FOO" when extracting a member named "foo"!\r
-3 -c\r
--c\r
---to-stdout\r
-\r
- Primary Mode. Extract files to stdout/screen. For details, see\r
- Options_Primary_Mode.\r
-3 -D\r
--D\r
---dir-timestamps\r
-\r
- Control timestamps on extracted files and directories. By default,\r
- UnZip restores timestamps for extracted files, but not for\r
- directories it creates. Specifying -D tells UnZip not to restore\r
- any timestamps. Specifying -D- tells UnZip to restore timestamps\r
- for directories as well as other items. -D- works only on systems\r
- that support setting timestamps for directories (currently ATheOS,\r
- BeOS, MacOS, OS/2, Unix, VMS, Win32). On other systems, -D- has no\r
- effect.\r
-\r
- [Non-VMS] Timestamp restoration behavior changed between UnZip\r
- versions 6.00 and 6.10. The following table shows the effects of\r
- various -D options for both versions.\r
-\r
- UnZip version |\r
- 6.00 | 6.10 | Restore timestamps on:\r
- -----------+-----------+------------------------\r
- -DD | -D | Nothing.\r
- -D | (default) | Files, not directories.\r
- (default) | -D- | Files and directories.\r
-\r
- [VMS] The old behavior on VMS was the same as the new behavior on\r
- all systems. (The old negated --D option is now -D-, because of\r
- changes to the command-line parser.)\r
-3 -d\r
--d dest_dir\r
---extract-dir dest_dir\r
-\r
- Specifies a destination directory for extracted files. By default,\r
- files are extracted (and subdirectories created) in the current\r
- directory. With "-d dest_dir", extraction is done into the\r
- specified directory, instead. See also -da.\r
-\r
- The option and directory may be concatenated without any white space\r
- between them, but this may cause normal shell behavior to be\r
- suppressed. For example, "-d ~" (tilde) is expanded by Unix shells\r
- into the name of the user's home directory, but "-d~" is treated as\r
- a literal "~" subdirectory of the current directory.\r
-\r
- [VMS] On VMS, only a VMS-style device:[directory] specification is\r
- permitted.\r
-3 -d\r
--da[=reuse]\r
---auto-extract-dir[=reuse]\r
-\r
- Specifies a destination directory for extracted files which is\r
- derived from the base name of the archive. By default, files are\r
- extracted (and subdirectories created) in the current default\r
- directory. With -da, UnZip automatically derives a subdirectory\r
- name from the archive name, creates that subdirectory, and extracts\r
- files into that subdirectory.\r
-\r
- For example, with -da, extraction of "fred.zip" is done into\r
- subdirectory "[.fred]" instead of into the current directory. (On\r
- non-VMS, systems, subdirectory "fred".)\r
-\r
- For greater safety, by default, UnZip will refuse to extract into an\r
- automatic extraction directory which already exists. Specifying the\r
- optional keyword "reuse" will allow an existing directory to be\r
- used.\r
-\r
- If -da is specified as a default option in an environment variable,\r
- it can be overridden by either a negated -da- option or an explicit\r
- "-d dest_dir" option. See also -d.\r
-3 -f\r
--f\r
---freshen\r
-\r
- Primary Mode. Freshen existing files. For details, see\r
- Options_Primary_Mode.\r
-3 -h\r
--h\r
---help\r
-\r
- Primary Mode. Display brief (roughly 24 lines) usage instructions.\r
- For details, see Options_Primary_Mode.\r
-3 -hh\r
--hh\r
---long-help\r
-\r
- Primary Mode. Display complete usage instructions. For details,\r
- see Options_Primary_Mode.\r
-3 -i\r
--i\r
---no-mac-ef-names\r
-\r
- [MacOS (pre-OS-X)] Ignore filenames stored in MacOS extra fields.\r
- Instead, the most compatible filename stored in the generic part of\r
- the member's header is used.\r
-3 -J\r
--J\r
---junk-attrs\r
-\r
- [BeOS] Junk file attributes. The file's BeOS file attributes are\r
- not restored, only the file's data.\r
-\r
- [MacOS] Ignore MacOS extra fields. All Macintosh-specific info is\r
- skipped. AppleDouble files are restored as separate files.\r
-3 -j\r
--j[=depth]\r
---junk-dirs[=depth]\r
-\r
- Junk directories on extracted files. With -j, all directory\r
- information is stripped from an archive member name, so all files\r
- are extracted into the destination directory. (See also -d.)\r
-\r
- If a depth ("=depth", where "depth" is a positive integer) is\r
- specified, then that number of directory levels will be stripped\r
- from an archive member name. For example, an archive member like\r
- "a/b/c/d/ee.txt" would normally be extracted as "[.a.b.c.d]ee.txt".\r
- With -j, it would be extracted as "ee.txt". With -j=2, the first\r
- two directory levels would be stripped, so it would be extracted as\r
- "[.c.d]ee.txt".\r
-3 --jar\r
-\r
- Treat archive(s) as Java JAR. Over-simplification in Java JAR\r
- archives can cause UnZip to transform UTF-8 file names according to\r
- inappropriate (MS-DOS) rules, yielding corrupt names on extracted\r
- files (typically those with ASCII codes 128-255). Archives\r
- containing a Java "CAFE" extra field should be detected\r
- automatically, and handled correctly, but not all JAR archives\r
- include that extra field. Specifying --jar tells UnZip to expect\r
- UTF-8 file names, regardless of whether the archive contains a\r
- "CAFE" extra field.\r
-3 -K\r
--K\r
---keep-s-attrs\r
-\r
- [AtheOS, BeOS, Unix] Retain SUID/SGID/Tacky permission bits. By\r
- default, these permission bits are cleared, for security reasons.\r
-3 -k\r
---keep-permissions\r
-\r
- [AtheOS, BeOS, Unix, VMS] Control how archived permissions or\r
- protections are restored on extracted files and directories.\r
-\r
- By default, archived permissions are restored with some limitations.\r
- On AtheOS, BeOS, and Unix, the current umask value is applied (to\r
- the normal user/group/other permissions). On VMS, the current\r
- default protection is applied to the UIC-based (SOGW) protections.\r
-\r
- With -k, the archived permissions are restored without regard to the\r
- Unix umask or VMS default protection. (This was the default\r
- behavior in UnZip versions before 6.10.)\r
-\r
- With -k-, the archived permissions are ignored, so only the Unix\r
- umask or VMS default protection is effective. (On VMS, directories\r
- are always created without any Delete access.)\r
-\r
- On AtheOS, BeOS, and Unix, the SUID/SGID/Tacky permission bits are\r
- controlled by the -K/--keep-s-attrs option, regardless of the\r
- -k/--keep-permissions setting.\r
-3 -ka\r
---keep-acl [VMS] Restore ACLs on extracted files and directories.\r
-3 -L\r
--L\r
---lowercase-names\r
-\r
- Convert to lowercase any filename originating on an uppercase-only\r
- operating system or file system. (This was UnZip's default behavior\r
- in versions before 5.11. The current default behavior is the same\r
- as the old behavior with the -U option. -U is now used for another\r
- purpose.)\r
-\r
- Depending on the archiver, files archived from single-case file\r
- systems (old MS-DOS FAT, VMS ODS2, and so on) may be stored as\r
- all-uppercase names; this can be ugly or inconvenient when\r
- extracting to a case-preserving file system such as OS/2 HPFS or a\r
- case-sensitive one such as on Unix. By default UnZip lists and\r
- extracts such filenames exactly as they're stored (excepting\r
- truncation, conversion of unsupported characters, an so on). With\r
- -L, the names of all files from certain systems will be converted to\r
- lowercase. With -LL, all file names will be down-cased, regardless\r
- of the originating file system.\r
-3 -l\r
--l\r
---list\r
-\r
- Primary Mode. List archive members. For details, see\r
- Options_Primary_Mode.\r
-3 -M\r
--M ([CMS,MVS] Or: " -m )\r
---more\r
-\r
- Pipe all output through an internal pager similar to the Unix\r
- more(1) command. At the end of a screenful of output, UnZip pauses\r
- with a "--More--" prompt; the next screenful may be viewed by\r
- pressing the Enter (Return) key or the space bar. UnZip can be\r
- terminated by pressing the "q" key and, on some systems, the\r
- Enter/Return key. Unlike Unix more(1), there is no\r
- forward-searching or editing capability. Also, UnZip doesn't notice\r
- if long lines wrap at the edge of the screen, effectively resulting\r
- in the printing of two or more lines and the likelihood that some\r
- text will scroll off the top of the screen before being viewed. If\r
- the actual number of lines on the screen can not be determined, 24\r
- lines will be assumed.\r
-3 -mc\r
--mc\r
---member-counts\r
-\r
- Control inclusion of separate member counts for directories, files,\r
- and links, after the totals summary at the end of the report. By\r
- default, they are included. Use "-mc-" or "--member-counts-" to\r
- suppress them. See also -t.\r
-3 -N\r
--N\r
---comment-to-note\r
-\r
- [Amiga] Extract member comments as Amiga filenotes. Member comments\r
- are created with the -c option of Zip, or with the -N option of the\r
- Amiga port of Zip, which stores filenotes as comments.\r
-3 -n\r
--n\r
---never-overwrite\r
-\r
- When extracting, never overwrite existing files. If a file already\r
- exists, skip the extraction of that file without asking. See also\r
- -o (--overwrite).\r
-\r
- By default, UnZip queries the user before extracting any file that\r
- already exists. The user may choose to overwrite only the current\r
- file, overwrite all files, skip extraction of the current file, skip\r
- extraction of all existing files, or rename the current file (choose\r
- a new name for the extracted file).\r
-\r
- [VMS] On VMS, the usual query choices are to create a new version of\r
- an existing file, to skip extraction, or to rename the current file.\r
- In the case where an archive member name includes a version number,\r
- and -V ("retain VMS file version numbers") is in effect, then an\r
- additional query choice is offered: to overwrite the existing file.\r
-3 -O\r
--O\r
---oem-char-set char_set\r
-\r
- [Unix] Select OEM character set char_set.\r
-3 -o\r
--o\r
---overwrite\r
-\r
- Always overwrite existing files without prompting. This is a\r
- dangerous option, so use it with care. (It is often used with -f,\r
- however, and is the only way to overwrite directory EAs on OS/2.)\r
-\r
- By default, UnZip queries the user before extracting any file that\r
- already exists.\r
-\r
- [Non-VMS] On non-VMS systems, the user may choose to overwrite only\r
- the current file, overwrite all files, skip extraction of the\r
- current file, skip extraction of all existing files, or rename the\r
- current file (choose a new name for the extracted file).\r
-\r
- [VMS] On VMS, the usual query choices are to create a new version of\r
- an existing file, to skip extraction, or to rename the current file.\r
- In the case where an archive member name includes a version number,\r
- and -V ("retain VMS file version numbers") is in effect, then an\r
- additional query choice is offered: to overwrite the existing file.\r
- In this case, -o selects the "new version" choice, and -oo (or "-o\r
- -o") selects the "overwrite" choice.\r
-3 -P\r
--P password\r
---password password\r
-\r
- Use "password" to decrypt encrypted archive members (if any). THIS\r
- IS INSECURE! Many multi-user operating systems provide ways for any\r
- user to see the current command line of any other user. Even on\r
- stand-alone systems, there is always the threat of over-the-shoulder\r
- peeking. Storing the plaintext password as part of a command line\r
- in an automated script can be even less secure, Whenever possible,\r
- use the non-echoing, interactive prompt to enter passwords. Where\r
- security is truly important, use a strong encryption method, such as\r
- AES, instead of the relatively weak encryption provided by\r
- Traditional ZIP encryption. Or, use an external encryption program,\r
- such as GnuPG, before archiving the file. (Note that Zip will\r
- probably not be able to do significant compression on a file which\r
- has already been encrypted.)\r
-3 -p\r
--p\r
---pipe-to-stdout\r
-\r
- Primary Mode. Extract files to stdout (pipe). For details, see\r
- Options_Primary_Mode.\r
-3 -q\r
--q\r
---quiet\r
-\r
- Perform operations quietly. (-qq: even more quietly). By default,\r
- UnZip prints the names of the files it's extracting or testing, the\r
- extraction methods, any member or archive comments that may be\r
- stored in the archive, and possibly a summary when finished with\r
- each archive. The -q[q] options suppress the printing of some or\r
- all of these messages.\r
-3 -r\r
--r\r
---remove-exts\r
-\r
- [Tandem] Remove file extensions.\r
-3 -S\r
--S\r
---streamlf\r
-\r
- [VMS] Use Stream_LF record format when converting extracted text\r
- files (-a, -aa), instead of the text-file default, variable-length\r
- record format.\r
-\r
- [VMS] On VMS, for archives with VMS attribute information (made with\r
- "zip -V"), files are always created with their original record\r
- formats. For archives without VMS attribute information (not made\r
- with "zip -V"), all files are normally created with Stream_LF record\r
- format. With -a, text files are normally created with\r
- variable-length record format, but adding -S gives them Stream_LF\r
- record format. With -aa, all files are treated as text files. See\r
- also -a and -b.\r
-3 -s\r
--s\r
---space-to-uscore\r
-\r
- [OS/2, NT, MS-DOS] Convert spaces in filenames to underscores.\r
- Because all these operating systems allow spaces in filenames, UnZip\r
- normally extracts filenames with spaces intact (for example, "EA\r
- DATA. SF"). Working with such file names can be awkward, however,\r
- so -s can be used to replace spaces with underscores.\r
-3 -sc\r
--sc\r
---show-command\r
-\r
- Show processed command line (options, arguments), and then exit.\r
-\r
- Strictly speaking this is a primary-mode option, but it's intended\r
- for use in program development, not in normal use.\r
-3 -si\r
--si\r
---show-pid\r
-\r
- [Non-VMS] Show the UnZip program's process ID (pid) before\r
- performing any other work. This value can then be used in a "kill\r
- -USR1 pid" command to trigger a user-triggered progress report.\r
-3 -so\r
--so\r
---show-options\r
-\r
- Display all valid program options, then exit.\r
-\r
- Strictly speaking this is a primary-mode option, but it's intended\r
- for use in program development, not in normal use.\r
-3 -T\r
--T\r
---timestamp-new\r
-\r
- Primary Mode. Set the timestamp on the archive(s) to that of the\r
- newest file in each one. For details, see Options_Primary_Mode.\r
-3 -t\r
--t\r
---test\r
-\r
- Primary Mode. Test archive members. For details, see\r
- Options_Primary_Mode.\r
-3 -U\r
--U\r
---unicode\r
-\r
- [UNICODE_SUPPORT] Control UTF-8 handling. When UNICODE_SUPPORT is\r
- available, -U forces UnZip to escape all non-ASCII characters from\r
- UTF-8 coded filenames as "#Uxxxx' (for UCS-2 characters, or\r
- "#Lxxxxxx" for Unicode codepoints needing 3 octets). This option is\r
- mainly provided for debugging purpose when the fairly new UTF-8\r
- support is suspected to mangle up extracted filenames.\r
-\r
- -UU disables the recognition of UTF-8 encoded filenames. The\r
- handling of filename codings within UnZip falls back to the behavior\r
- of previous versions.\r
-\r
- [old, obsolete usage] Leave filenames uppercase if created on\r
- MS-DOS, VMS, and so on. See -L.\r
-3 -u\r
--u\r
---update\r
-\r
- Primary mode. Update existing files and create new ones if needed.\r
- For details, see Options_Primary_Mode.\r
-3 -V\r
--V\r
---keep-versions\r
-\r
- [Non-CMS-MVS] Retain VMS file version numbers. VMS files can be\r
- stored with a version number, in the format "file.type;##", where\r
- "##" is a decimal number. By default the ";##" version numbers are\r
- stripped, but this option allows them to be retained. (On file\r
- systems that limit filenames to particularly short lengths, the\r
- version numbers may be truncated or stripped regardless of this\r
- option.)\r
-\r
- [Non-VMS] Note that before UnZip version 6.10, on a non-VMS system,\r
- a file with a name like "fred;123" would, by default, be extracted\r
- as "fred", even if the file did not originate on a VMS system (so\r
- that ";123" was probably not really a VMS version number).\r
- Beginning with UnZip version 6.10, the default behavior is to strip\r
- VMS version numbers only from files which were archived on a VMS\r
- system. To restore the old behavior, and always strip apparent VMS\r
- version numbers, explicitly negate the option: "-V-".\r
-3 -v\r
--v\r
---verbose\r
-\r
- When used with some primary mode option, -v can make output more\r
- verbose. See also Primary Mode options, and -l in particular.\r
-\r
- Note: If only -v (--verbose) is specified with an archive name,\r
- then UnZip acts as if "-l -v" were specified, and a detailed listing\r
- is generated.\r
-3 -W\r
--W\r
---wild-no-span\r
-\r
- [WILD_STOP_AT_DIR] (Valid when the program was built with the C\r
- macro WILD_STOP_AT_DIR defined.) By default, the wildcard characters\r
- "?" (single-character wildcard) and "*" (multi-character wildcard)\r
- match any character in a member path/name. "-W" modifies the\r
- pattern-matching behavior for archive members so that both "?"\r
- (single-character wildcard) and "*" (multi-character wildcard) do\r
- not match the directory separator character "/". (The two-character\r
- sequence "**" acts as a multi-character wildcard that includes the\r
- directory separator in its matched characters.) For example, with\r
- "-W":\r
-\r
- "*.c" matches "foo.c" but not "mydir/foo.c"\r
- "**.c" matches both "foo.c" and "mydir/foo.c"\r
- "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c"\r
- "??*/*" matches "ab/foo" and "abc/foo"\r
- but not "a/foo" or "a/b/foo"\r
-\r
- This modified behavior is equivalent to the pattern matching style\r
- used by the shells of some of UnZip's supported target OSs (one\r
- example is Acorn RISC OS). This option may not be available on\r
- systems where the Zip archive's internal directory separator\r
- character "/" is allowed as regular character in native operating\r
- system filenames.\r
-\r
- [non-VMS] Currently, UnZip uses the same pattern matching rules for\r
- both wildcard archive file name specifications and archive member\r
- selection patterns on most system types. For systems allowing "/"\r
- as regular filename character, the -W option would not work as\r
- expected on a wildcard file name specification.\r
-3 -X\r
--X\r
---restore-info\r
-\r
- [VMS, Unix, OS/2, NT, Tandem] Restore owner/protection info (UICs\r
- and ACL entries on VMS, or user and group info (UID/GID) on Unix, or\r
- access control lists (ACLs) on certain network-enabled versions of\r
- OS/2 (Warp Server with IBM LAN Server/Requester 3.0 to 5.0; Warp\r
- Connect with IBM Peer 1.0), or security ACLs on Windows NT.) In most\r
- cases this will require special system privileges, and doubling the\r
- option (-XX) on NT instructs UnZip to use privileges for extraction;\r
- but on Unix, for example, a user who belongs to several groups can\r
- restore files owned by any of those groups, so long as the user IDs\r
- match the user's own. Note that ordinary file attributes are always\r
- restored. This option applies only to optional, extra ownership\r
- info available on some operating systems. (NT's access control\r
- lists do not appear to be especially compatible with OS/2's, so no\r
- attempt is made at cross-platform portability of access privileges.\r
- It is not clear under which conditions this would ever be useful\r
- anyway.)\r
-3 -x\r
--x member ...\r
---exclude member ...\r
-\r
- An optional list of archive members to be excluded from processing.\r
- Because wildcard characters normally match "/" directory separators\r
- (for exceptions see the option -W), this option may be used to\r
- exclude any files that are in subdirectories. For example, "unzip\r
- foo *.[ch] -x */*" would extract all C source files (*.c, *.h) in\r
- the main directory, but none in any subdirectories. Without the -x\r
- option, all C source files in all directories within the archive\r
- would be extracted.\r
-\r
- When the program sees -x (--exclude) on a command line, it stops\r
- scanning for options, and treats every succeeding item as an archive\r
- member name. To avoid confusion between member names and command\r
- options, it's simplest to specify -x (--exclude) and its member list\r
- as the last items on a command line. Alternatively, the special\r
- name "@" can be used to terminate the member list (and cause the\r
- program to resume scanning for options). That is, the following two\r
- commands are equivalent:\r
-\r
- unzip fred.zip -b -x file1 file2 file3\r
- unzip fred.zip -x file1 file2 file3 @ -b\r
-3 -Y\r
--Y\r
---dot-version\r
-\r
- [VMS] Treat archive member name endings of ".nnn" (where "nnn" is a\r
- decimal number) as if they were VMS version numbers (";nnn"). (The\r
- default is to treat them as file types.) For example:\r
-\r
- "a.b.3" -> "a.b;3"\r
-3 -Z\r
--Z\r
---zipinfo-mode\r
-\r
- ZipInfo mode. If the first option on the command line is -Z, then\r
- the program runs in ZipInfo mode, which is used to display\r
- information about an archive and its members. Remaining options are\r
- interpreted as ZipInfo options. See ZipInfo_mode.\r
-3 -z\r
--z\r
---zipfile-comment\r
-\r
- Primary mode. Display only the archive comment. For details, see\r
- Options_Primary_Mode.\r
-3 -$\r
--$\r
---volume-labels\r
-\r
- [MS-DOS, OS/2, NT] Restore the volume label if the extraction medium\r
- is removable (for example, a diskette). Doubling the option (-$$)\r
- allows fixed media (hard disks) to be labeled as well. By default,\r
- volume labels are ignored.\r
-3 -/\r
--/\r
---extensions\r
-\r
- [Acorn] Overrides the extension list supplied by the Unzip$Ext\r
- environment variable. During extraction, filename extensions that\r
- match one of the items in this extension list are swapped in front\r
- of the base name of the extracted file.\r
-3 -:\r
--:\r
---do-double-dots\r
-\r
- [all but Acorn, VM/CMS, MVS, Tandem] Allows UnZip to extract archive\r
- members into locations outside of the current extraction destination\r
- directory (and its subdirectories).\r
-\r
- For security reasons, UnZip normally removes "parent directory" path\r
- components ("../") from the path names of archive members as they\r
- are extracted. This safety feature (new for version 5.50) prevents\r
- UnZip from accidentally writing files to directories outside the\r
- current destination directory tree. The -: option sets UnZip back\r
- to its previous, more liberal behavior, allowing exact extraction of\r
- archives that use "../" path components to create multiple directory\r
- trees at or above the level of the destination directory.\r
-\r
- This option does not enable writing explicitly to the root directory\r
- ("/"). To achieve this, it is necessary to set the extraction\r
- target folder to "/" (by using an option like "-d /"). However,\r
- when the -: option is specified, it is still possible implicitly to\r
- write to the root directory if member paths specifying enough "../"\r
- path components.\r
-\r
- Use this option with extreme caution.\r
-3 -^\r
--^\r
---control-in-name\r
-\r
- [Unix] Allow control characters in file names of extracted ZIP\r
- archive members. On Unix, a file name may contain any (8-bit)\r
- character code with the two exceptions of "/" (the directory\r
- delimiter) and NUL (0x00, the C string-termination character),\r
- unless the specific file system has more restrictive conventions.\r
- Generally, this allows embedding ASCII control characters or escape\r
- sequences in file names. However, this feature allows the use of\r
- malicious file names which can cause various kinds of bad trouble\r
- when displayed on a user's terminal/emulator. (Even a file name\r
- with unprintable but otherwise harmless characters can cause\r
- problems for users.)\r
-\r
- For these reasons, by default, UnZip applies a filter that removes\r
- potentially dangerous control characters from the extracted file\r
- names. The -^ option overrides this filter in the rare case that\r
- embedded filename dangerous control characters are to be\r
- intentionally restored.\r
-2 Environment_Options\r
- UnZip's default behavior may be modified by placing command-line\r
- options in an environment variable. This can be done with any\r
- option, but it is probably most useful options like -a (auto-convert\r
- text files), -L (downcase file names from systems with all uppercase\r
- file names), -C (use case-insensitive name matching), -q (quiet), -o\r
- (always overwrite), or -n (never overwrite).\r
-\r
- For UnZip, the environment variable name on VMS is UNZIP_OPTS\r
- (non-VMS: UNZIP). The name on VMS is different to avoid conflict\r
- with a foreign-command DCL symbol, UNZIP. For compatibility with\r
- Zip, if UNZIP_OPTS is not defined, then UnZip will use UNZIPOPT the\r
- same way.\r
-\r
- For ZipInfo ("unzip -Z"), the environment variable name on VMS is\r
- ZIPINFO_OPTS (non-VMS: ZIPINFO). For compatibility with Zip, if\r
- ZIPINFO_OPTS is not defined, then ZipInfo will use ZIPINFOOPT the\r
- same way.\r
-\r
- For example, to make UnZip act as quietly as possible, only\r
- reporting errors, one could use commands like the following:\r
-\r
- Unix Bourne (or similar) shell:\r
- UNZIP='-q -q'; export UNZIP\r
-\r
- Unix C shell:\r
- setenv UNZIP '-q -q'\r
-\r
- OS/2 or MS-DOS:\r
- set UNZIP="-q -q"\r
-\r
- VMS (with quotation to preserve lower case in DCL):\r
- define UNZIP_OPTS "-q -q" ! Logical name, or\r
- UNZIP_OPTS = "-q -q" ! DCL symbol. (Either works.)\r
-\r
- Environment options are treated the same as any other command-line\r
- options, except that they are effectively the first options on the\r
- command line. To override an environment option, one may use an\r
- explicit option to cancel or override it. For example, to override\r
- one of the "quiet" flags in the example above, use a command like:\r
-\r
- unzip -q- [other options] archive.zip\r
-\r
- The leading hyphen is the normal option character, and the trailing\r
- one negates the option, canceling one level of quietness. To cancel\r
- multiple "quiet" flags, use multiple -q- options:\r
-\r
- unzip -t -q- -q- archive\r
- unzip -q- -q- -t archive\r
-\r
- Note that multiple one-character options like "-q" and "-q" can be\r
- combined into a single "-qq", but it's generally clearer to keep\r
- each instance of each option separate. Similarly, negated\r
- one-character options can be combined, as with "-q-q-", but "-q-\r
- -q-" is generally clearer.\r
-\r
- The examples show short (one-character) options, but long ("--")\r
- options are also allowed.\r
-2 Encryption_Decryption\r
- Zip and UnZip have long supported a relatively weak encryption\r
- method, which we call Traditional ZIP encryption. The source code\r
- for Traditional encryption is included in the source kits, and\r
- support for Traditional encryption is enabled by default.\r
- (Build-time C macro: CRYPT_TRAD.)\r
-\r
- Beginning with UnZip version 6.10 and Zip version 3.1, these\r
- programs also offer a stronger, Advanced Encryption Standard (AES)\r
- encryption method, which we call AES WinZip/Gladman (AES_WG)\r
- encryption. (The encryption code was supplied by Brian Gladman, and\r
- the archive format is intended to be compatible with that used by\r
- the WinZip program. WinZip is a registered trademark of WinZip\r
- International LLC.) The source code for AES_WG encryption is\r
- distributed in a separate kit (for export control reasons), and\r
- support for AES_WG encryption must be enabled explicitly at build\r
- time. (Build-time C macro: CRYPT_AES_WG.) See the INSTALL file in\r
- the source kit for details on how to enable AES_WG encryption (or\r
- how to disable Traditional encryption).\r
-\r
- For details on the WinZip AES scheme, see:\r
- http://www.winzip.com/aes_info.htm\r
-\r
- For information on the separate AES_WG source kit, see:\r
- ftp://ftp.info-zip.org/pub/infozip/crypt/\r
- ftp://ftp.info-zip.org/pub/infozip/crypt/README_AES_WG.txt\r
-\r
- Normally, encryption passwords are supplied by the user\r
- interactively when requested by the program. See the -P option for\r
- a (less secure) method of specifying a password on the command line.\r
-\r
- With Traditional encryption, when decrypting, a password will be\r
- checked against header data, and used if it appears to be correct.\r
- The correct password will always check out against the header data,\r
- but there is a 1-in-256 chance that an incorrect password will as\r
- well. (This is a security feature of the PKWARE archive format; it\r
- helps prevent brute-force attacks that might otherwise gain a large\r
- speed advantage by testing only the header.) In the case that an\r
- incorrect password is given but it passes the header test anyway,\r
- either an incorrect CRC will be generated for the extracted data or\r
- else UnZip will fail during the extraction because the "decrypted"\r
- bytes do not constitute a valid compressed data stream.\r
-\r
- If the first password fails the header check on some file, UnZip\r
- will prompt for another password, and so on until all files are\r
- extracted. If a password is not known, entering a null password\r
- (that is, just a carriage return or "Enter") is taken as a signal to\r
- skip all further prompting. Only unencrypted files in the\r
- archive(s) will thereafter be extracted. (The situation is actually\r
- a little more complicated. Some old versions of Zip and ZipCloak\r
- allowed null passwords, so UnZip checks each encrypted file to see\r
- if the null password works. This may result in "false positives"\r
- and extraction errors, as noted above.)\r
-\r
- Archives encrypted with 8-bit-character passwords (for example,\r
- passwords with accented European characters) may not be portable\r
- across systems or to other archivers. This problem stems from the\r
- use of multiple encoding methods for such characters, including\r
- Latin-1 (ISO 8859-1) and OEM code page 850. DOS PKZIP 2.04g uses\r
- the OEM code page; Windows PKZIP 2.50 uses Latin-1 (and is therefore\r
- incompatible with DOS PKZIP; Info-ZIP uses the OEM code page on DOS,\r
- OS/2 and Win3.x ports but ISO coding (Latin-1 etc.) everywhere else;\r
- and Nico Mak's WinZip 6.x does not allow 8-bit-character passwords\r
- at all. UnZip 5.3 (or newer) attempts to use the default character\r
- set first (e.g., Latin-1), followed by the alternate one (e.g., OEM\r
- code page) to test passwords. On EBCDIC systems, if both of these\r
- fail, EBCDIC encoding will be tested as a last resort. (EBCDIC is\r
- not tested on non-EBCDIC systems, because there are no known\r
- archivers that encrypt using EBCDIC encoding.) ISO character\r
- encodings other than Latin-1 are not supported. The new addition of\r
- (partial) Unicode (UTF-8) support in UnZip 6.0 has not yet been\r
- adapted to the encryption password handling in UnZip. On systems\r
- that use UTF-8 as native character encoding, UnZip simply tries\r
- decryption with the native UTF-8 encoded password; the built-in\r
- attempts to check the password in translated encoding have not yet\r
- been adapted for UTF-8 support and will consequently fail.\r
-2 Examples\r
- To use UnZip to extract all members of the archive letters.zip into\r
- the current directory and subdirectories below it, creating any\r
- subdirectories as necessary:\r
-\r
- unzip letters\r
-\r
- To extract all members of letters.zip into the current directory\r
- only:\r
-\r
- unzip -j letters\r
-\r
- To test letters.zip, printing only a summary message indicating\r
- whether the archive is OK or not:\r
-\r
- unzip -t -q letters\r
-\r
- To test all ".zip" archives in the current directory, printing only\r
- the summaries:\r
-\r
- unzip -t -q *.zip\r
-\r
- (On a Unix system, the wildcard archive name would typically need to\r
- be quoted to keep a a Unix shell from expanding ("globbing") it.\r
- This is not necessary on VMS.)\r
-\r
- The following command extracts to standard output all members of\r
- letters.zip whose names end in ".tex", auto-converting to the local\r
- end-of-line convention, in Stream_LF record format, and piping the\r
- output into TYPE /PAGE:\r
-\r
- pipe unzip -c -a -S letters *.tex | type /page sys$input\r
-\r
- To extract from source.zip all Fortran and C source files (*.f, *.c,\r
- *.h) and Makefile into the SYS$SCRATCH directory:\r
-\r
- unzip source.zip *.[fch] Makefile -d sys$scratch\r
-\r
- To extract all FORTRAN and C source files, regardless of case (for\r
- example, both *.c and *.C, and any makefile, Makefile, MAKEFILE or\r
- similar):\r
-\r
- unzip -C source.zip *.[fch] makefile -d sys$scratch\r
-\r
- The following command extracts only newer versions of the files\r
- already in the current directory, without querying. (Note: Be\r
- careful of extracting in one timezone an archive created in another.\r
- ZIP archives created by Zip versions before 2.1 contain no timezone\r
- information, and a "newer" file from an eastern timezone may, in\r
- fact, be older):\r
-\r
- unzip -f -o sources\r
-\r
- To extract newer versions of the files already in the current\r
- directory and to create any files not already there (same caveat as\r
- previous example):\r
-\r
- unzip -u -o sources\r
-\r
- To display a configuration report showing the program version, the\r
- OS and compiler used to build it, a list of optional features\r
- enabled at build time, and the values of all the relevant\r
- environment variables:\r
-\r
- unzip -v\r
-\r
- In the last five examples, assume that UNZIP_OPTS is set to -q. To\r
- do a (singly) quiet listing:\r
-\r
- unzip -l file.zip\r
-\r
- To do a doubly quiet listing:\r
-\r
- unzip -l -q file.zip\r
-\r
- (Note that the ".zip" is generally not necessary.) To do a standard\r
- listing:\r
-\r
- unzip -l -q- file.zip\r
-\r
- or:\r
-\r
- unzip -lq- file.zip\r
-\r
- or:\r
-\r
- unzip -q-l file.zip\r
-\r
-2 Exit_Status\r
- UnZip's exit status approximates the exit codes defined by PKWARE.\r
- On VMS, UnZip's UNIX-style exit values are translated into VMS-style\r
- status codes with facility code 1954 = %x7A2, and with the\r
- inhibit-message (%x10000000) and facility-specific (%x00008000) bits\r
- set:\r
-\r
- %x17A28001 normal exit\r
- %x17A28000 + 16*UnZip_error_code warnings\r
- %x17A28002 + 16*UnZip_error_code normal errors\r
- %x17A28004 + 16*UnZip_error_code fatal errors\r
-\r
- Note that multiplying the UNIX-style UnZip error code by 16 places\r
- it conveniently in the hexadecimal representation of the VMS exit\r
- code, "__" in %x17A28__s, where "s" is the severity code. For\r
- example, a missing archive might cause UnZip error code 9, which\r
- would be transformed into the VMS exit status %X17A28092.\r
-\r
- The UnZip VMS exit codes include severity values which approximate\r
- those defined by PKWARE, as shown in the following table:\r
-\r
- VMS UnZip\r
- severity err code Error description\r
- ----------+----------+----------------------------------------------\r
- Success 0 Normal. No errors or warnings detected.\r
- Warning 1 One or more warnings were encountered, but\r
- processing completed successfully. This\r
- includes archives where one or more (but not\r
- all) files were skipped because of an\r
- unsupported compression or encryption method,\r
- or a bad encryption password.\r
- Error 2 Error in the archive format. Processing may\r
- or may not have completed successfully.\r
- Fatal 3 Severe error in the archive format.\r
- Processing probably failed immediately.\r
- Fatal 4 Memory allocation failed in program\r
- initialization.\r
- Fatal 5 Memory allocation or terminal I/O failed in\r
- password processing.\r
- Fatal 6 Memory allocation failed while decompressing\r
- to disk.\r
- Fatal 7 Memory allocation failed while decompressing\r
- in memory.\r
- Fatal 8 Memory allocation failed. (Currently not\r
- used.)\r
- Error 9 Specified archive files were not found.\r
- Error 10 Invalid command-line options or parameters.\r
- Error 11 No matching files were found.\r
- Fatal 50 Disk (file system) filled during extraction.\r
- Fatal 51 Unexpected end-of-file while reading the\r
- archive.\r
- Error 80 User interrupt (Ctrl/C).\r
- Error 81 No files were processed, because of\r
- unsupported compression or encryption\r
- methods.\r
- Error 82 No files were processed, because of bad\r
- encryption password(s).\r
- Fatal 83 Large-file archive could not be processed by\r
- this small-file program.\r
-2 Bugs\r
- Multi-part archives are not yet supported, except in conjunction\r
- with Zip. (All parts must be concatenated together in order, and\r
- then "zip -F" (for Zip 2.x) or "zip -FF" (for Zip 3.x) must be\r
- performed on the concatenated archive in order to "fix" it. Also,\r
- zip 3.0 and later can combine multi-part (split) archives into a\r
- combined single-file archive using "zip -s- inarchive -O\r
- outarchive". See the zip manual page for more information.) This\r
- may be corrected in the next major release.\r
-\r
- Archives read from standard input are not yet supported, except with\r
- UnZip (and then only the first member of the archive can be\r
- extracted).\r
-\r
- Archives encrypted with 8-bit-character passwords (such as passwords\r
- with accented European characters) may not be portable across\r
- systems and/or other archivers. See also Encryption_Decryption.\r
-\r
- UnZip's -M ("--more") option tries to take into account automatic\r
- wrapping of long lines. However, the code may fail to detect the\r
- correct wrapping locations. First, TAB characters (and similar\r
- control sequences) are not taken into account, they are handled as\r
- ordinary printable characters. Second, depending on the actual\r
- system type, UnZip may not detect the true terminal/emulator\r
- geometry, but instead may rely on "commonly used" default\r
- dimensions. The correct handling of tabs would require the\r
- implementation of a query for the actual tab setup on the output\r
- terminal/emulator.\r
-\r
- [Unix] Unix special files such as FIFO buffers (named pipes), block\r
- devices and character devices are not restored even if they are\r
- somehow represented in the archive, nor are hard-linked files\r
- relinked. Basically, the only file types restored by UnZip are\r
- regular files, directories, and symbolic (soft) links.\r
-\r
- [OS/2] Extended attributes for existing directories are only updated\r
- if the -o ("--overwrite") option is given. This is a limitation of\r
- the operating system; because directories only have a creation time\r
- associated with them, UnZip has no way to determine whether the\r
- stored attributes are newer or older than those on disk. In\r
- practice this may mean a two-pass approach is required: first\r
- unpack the archive normally (with or without freshening/updating\r
- existing files), then overwrite just the directory entries (for\r
- example, "unzip -o foo */").\r
-\r
- Note that uppercase options (-C, -D, -L, -M, -P, -S, -T, -V, -X, -Y,\r
- and -Z) must be specified in quotes (unless SET PROC/PARSE=EXTEND is\r
- set). For example:\r
-\r
- unzip "-VX" -a zipfile\r
-\r
- When extracting to SYS$OUTPUT (-c or -p options) redirected to a\r
- file, you may want to override the default text file conversion by\r
- specifying the -b option. A single "-b" option switches to "binary\r
- piping" mode for Zip entries marked as non-text, only. To force\r
- "binary piping" mode even for Zip file entries marked as text, the\r
- "-bb" option should be used. (Please note that a later "-a" cancels\r
- any -b option, see below.)\r
-\r
- The output conversion options -b and -a may be combined to perform\r
- binary conversions on binary files and text conversion on text\r
- files. But note: For compatibility with implementation on other\r
- systems, -b cancels any -a option; to get the intended result, -a\r
- must be specified AFTER -b. And, in combination, "text" recognition\r
- takes precedence; this means that -bba (-bb -a) has the same effect\r
- as -ba (-b -a), and -aa overrides binary conversion for ALL files.\r
-\r
- The conversion option -S is only effective when used together with\r
- -a or -aa. When specified, "text" files are written in Stream_LF\r
- record format instead of the VMS default of Variable-Length record\r
- format. (When no conversion options are specified, all non-VMS\r
- entries are always written as Stream_LF files.)\r
-\r
- Please note that using the "-P<password>" option is higly insecure,\r
- the plaintext password may be seen by others. For this reason (and\r
- because of lack of space), the "-P<password>" option is not\r
- advertised on UnZip's online help screen.\r
-2 URL\r
- The Info-ZIP main Web page is:\r
- http://www.info-zip.org/\r
-\r
- FTP access is available, too:\r
- ftp://ftp.info-zip.org/pub/infozip/\r
-2 ZipInfo_mode\r
- If the first option on the UnZip command line is "-Z", then the\r
- program runs in ZipInfo mode. Remaining options are interpreted as\r
- ZipInfo options.\r
-\r
- ZipInfo reports detailed information about a ZIP archive and its\r
- members. This information may include file access permissions,\r
- compression method, encryption method, version and operating system\r
- (or file system) of the archive-creating program, and so on. The\r
- default behavior (with no options) is to show a single-line entry\r
- for each member in the archive, with a header and a trailer\r
- providing summary information for the entire archive. The format is\r
- a cross between Unix "ls -l" and "unzip -lv" output. See\r
- Detailed_Description. ZipInfo is the same program as UnZip. (On\r
- Unix, "zipinfo" may be a link to "unzip". On VMS, "zipinfo" is\r
- normally a DCL symbol defined as "''unzip' -Z".) However, ZipInfo\r
- support may have been disabled when UnZip was built.\r
-\r
- Format\r
-\r
- zipinfo [ zipinfo_options ] [ file[.zip] ] [ member ... ]\r
- unzip -Z [ zipinfo_options ] [ file[.zip] ] [ member ... ]\r
-3 Command_Parameters\r
-\r
-file[.zip]\r
-\r
- File path/name of a ZIP archive. A wildcard name may be used to\r
- specify multiple ZIP archives to be processed in one command. On\r
- VMS systems, any of the standard wildcards for a directory/file\r
- specification may be used: "...", "*", or "%" (or, since VMS V7.2,\r
- "?"). The default archive file specification is "[]*.ZIP".\r
-\r
- Note that a ".zip" or ".ZIP" file type on an archive is merely a\r
- convention, not a requirement. For example, a self-extracting ZIP\r
- archive named "fred" or "fred.exe" could be processed as if it were\r
- an ordinary archive; just specify the actual file name with its\r
- actual name ending (if any), whatever that may be.\r
-\r
-member ...\r
-\r
- An optional list of archive members to be processed, separated by\r
- spaces. Unix-like ("globbing") wildcard patterns may be used to\r
- match multiple members:\r
-\r
- * Matches a sequence of 0 or more characters.\r
- ? Matches exactly 1 character.\r
- [...] Matches any single character found inside the brackets.\r
- Ranges are specified by a beginning character, a hyphen, and\r
- an ending character. If an exclamation point ("!") or a\r
- caret ("^") follows the left bracket, then the range of\r
- characters within the brackets is complemented. That is,\r
- anything except the characters inside the brackets is\r
- considered a match. To specify a literal left bracket, use\r
- the three-character sequence "[[]".\r
-3 Options_Primary_Format\r
- Options in this group (-1, -2, -l, -m, -s, -v) specify the primary\r
- report format of ZipInfo. Only one of these primary format options\r
- may be specified.\r
-4 -1\r
--1\r
---names-only\r
-\r
- Primary Format. Show member names only, one per line. This option\r
- excludes all others, and the report does not include headers,\r
- trailers, or archive comments. This format may be useful with Unix\r
- shell (or other) scripts.\r
-4 -2\r
--2\r
---names-mostly\r
-\r
- Primary Format. Show member names only, one per line (as with\r
- "-1"), but allow headers (-h), trailers (-t), and archive comments\r
- (-z), if requested explicitly.\r
-4 -l\r
--l\r
---long-list\r
-\r
- Primary Format. Show member info in long Unix "ls -l" format. Like\r
- the -m format, except that the compressed size (in bytes) is printed\r
- instead of the compression ratio.\r
-4 -m\r
--m\r
---medium-list\r
-\r
- Primary Format. Show member info in medium-length Unix "ls -l"\r
- format. Like the -s format, except that the compression factor,\r
- expressed as a percentage, is also included.\r
-4 -s\r
--s\r
---short-list\r
-\r
- Primary Format. Show member info in short Unix "ls -l" format.\r
- This is the default behavior, unless -h or -t is specified.\r
-4 -v\r
--v\r
---verbose\r
-\r
- Primary Format. The verbose report is very detailed, and mostly\r
- self-explanatory, but it does assume some familiarity with the ZIP\r
- archive format. It also includes the archive comment, if any.\r
- Extra fields in the central directory are broken dowm into\r
- subfields, with brief descriptions of recognized subfields (or\r
- abbreviated dumps of unrecognized subfields).\r
-3 Options_Ordinary\r
- Options in this group modify the operation or report format of\r
- ZipInfo.\r
-4 -C\r
--C\r
---ignore-case ([CMS, MVS] --CMS-MVS-lower)\r
-\r
- Use case-insensitive name matching for names in the member list and\r
- the -x excluded-member list on the command line. By default,\r
- case-sensitive matching is done. For example, specifying "makefile"\r
- on the command line will match only "makefile" in the archive, not\r
- "Makefile" or "MAKEFILE". On many systems, the local file system is\r
- case-insensitive, so case-insensitive name matching would be more\r
- natural. With -C, "makefile" would match "makefile", "Makefile", or\r
- "MAKEFILE".\r
-\r
- /CASE_MATCH does not affect the search for the ZIP archive file(s).\r
-4 -h\r
--h\r
---header\r
-\r
- Include a header in the report, showing the archive name, the\r
- archive size (in bytes), and the number of members in the archive.\r
-\r
- For the Unix-format reports (options -l, -m, -s), the header is\r
- included by default, if no archive members are specified. If -h is\r
- specified alone, that is, without one of the Unix-format options,\r
- and without a member list, then only the header lines will be put\r
- out.\r
-4 -M\r
--M ([CMS,MVS] Or: -m)\r
---more\r
-\r
- Pipe all output through an internal pager similar to the Unix\r
- more(1) command. At the end of a screenful of output, Zipinfo\r
- pauses with a "--More--" prompt; the next screenful may be viewed by\r
- pressing the Enter (Return) key or the space bar. ZipInfo can be\r
- terminated by pressing the "q" key, or, on some systems, the\r
- Enter/Return key. Unlike Unix more(1), there is no\r
- forward-searching or editing capability. Also, ZipInfo doesn't\r
- notice if long lines wrap at the edge of the screen, effectively\r
- resulting in the printing of two or more lines and the likelihood\r
- that some text will scroll off the top of the screen before being\r
- viewed. If the actual number of lines on the screen can not be\r
- determined, 24 lines will be assumed.\r
-4 -T\r
--T\r
---decimal-time\r
-\r
- Show the file date-times in a sortable, all-numeric,\r
- "YYYYMMDD.hhmmss" format. The default date format is an\r
- alpha-numeric "YY-Mmm-DD hh:mm". For example ("-s", "-s -T"):\r
-\r
- -rw-a-- 3.1 fat 211916 tx defX 10-Jun-18 00:27 zip31c/zip.c\r
- -rw-a-- 3.1 fat 211916 tx defX 20100618.002703 zip31c/zip.c\r
-4 -t\r
--t\r
---totals\r
-\r
- Include a totals summary at the end of the report, showing the\r
- number of members in the report, the sum of their uncompressed\r
- sizes, the sum of their compressed sizes, and the compression factor\r
- as a percentage.\r
-\r
- For the Unix-format reports (options -l, -m, -s), the totals summary\r
- is included by default, if no archive members are specified. If -t\r
- is specified alone, that is, without one of the Unix-format options,\r
- and without a member list, then only the totals summary trailer\r
- lines will be put out.\r
-\r
- The total "bytes compressed" reported includes only the actual data,\r
- not the ZIP archive meta-data, so the size of the archive will\r
- always be greater than this value.\r
-\r
- See also -mc.\r
-4 -U\r
--U\r
---unicode\r
-\r
- [UNICODE_SUPPORT] Control UTF-8 handling. When UNICODE_SUPPORT is\r
- available, -U forces ZipInfo to escape all non-ASCII characters from\r
- UTF-8 coded filenames as "#Uxxxx" (for UCS-2 characters, or\r
- "#Lxxxxxx" for Unicode codepoints needing 3 octets). This option is\r
- mainly provided for debugging purpose when the fairly new UTF-8\r
- support is suspected of damaging extracted filenames.\r
-\r
- -UU disables the recognition of UTF-8 encoded filenames. The\r
- handling of filename codings within ZipInfo falls back to the\r
- behavior of pre-Unicode versions.\r
-4 -W\r
--W\r
---wild-no-span\r
-\r
- [WILD_STOP_AT_DIR] (Valid when the program was built with the C\r
- macro WILD_STOP_AT_DIR defined.) By default, the wildcard characters\r
- "?" (single-character wildcard) and "*" (multi-character wildcard)\r
- match any character in a member path/name. "-W" modifies the\r
- pattern-matching behavior for archive members so that both "?"\r
- (single-character wildcard) and "*" (multi-character wildcard) do\r
- not match the directory separator character "/". (The two-character\r
- sequence "**" acts as a multi-character wildcard that includes the\r
- directory separator in its matched characters.) For example, with\r
- "-W":\r
-\r
- "*.c" matches "foo.c" but not "mydir/foo.c"\r
- "**.c" matches both "foo.c" and "mydir/foo.c"\r
- "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c"\r
- "??*/*" matches "ab/foo" and "abc/foo"\r
- but not "a/foo" or "a/b/foo"\r
-\r
- This modified behavior is equivalent to the pattern matching style\r
- used by the shells of some of UnZip's supported target OSs (one\r
- example is Acorn RISC OS). This option may not be available on\r
- systems where the Zip archive's internal directory separator\r
- character "/" is allowed as regular character in native operating\r
- system filenames. (Currently, UnZip uses the same pattern matching\r
- rules for both wildcard archive file name specifications and archive\r
- member selection patterns on most system types. For systems\r
- allowing "/" as regular filename character, the -W option would not\r
- work as expected on a wildcard file name specification.)\r
-4 -x\r
--x member ...\r
---exclude member ...\r
-\r
- An optional list of archive members to be excluded from processing.\r
- Because wildcard characters normally match "/" directory separators\r
- (for exceptions see the option -W), this option may be used to\r
- exclude any files that are in subdirectories. For example, "unzip\r
- foo *.[ch] -x */*" would extract all C source files (*.c, *.h) in\r
- the main directory, but none in any subdirectories. Without the -x\r
- option, all C source files in all directories within the archive\r
- would be extracted.\r
-\r
- When the program sees -x (--exclude) on a command line, it stops\r
- scanning for options, and treats every succeeding item as an archive\r
- member name. To avoid confusion between member names and command\r
- options, it's simplest to specify -x (--exclude) and its member list\r
- as the last items on a command line. Alternatively, the special\r
- name "@" can be used to terminate the member list (and cause the\r
- program to resume scanning for options). That is, the following two\r
- commands are equivalent:\r
-\r
- zipinfo fred.zip -2 -t -x file1 file2 file3\r
- zipinfo fred.zip -x file1 file2 file3 @ -2 -t\r
-4 -z\r
--z\r
---zipfile-comment\r
-\r
- Include the archive comments (if any) in the report.\r
-3 Detailed_Description\r
- ZipInfo has three basic report formats, providing different degrees\r
- of detail in the information about the members of an archive: a\r
- simple list of names (-1, -2), a Unix ls-style listing (-l, -m, -s),\r
- and a very detailed analysis (-v). Some of the information, such as\r
- file sizes, is easy to interpret. Some of the information involves\r
- fairly obscure details of ZIP archive structure. ZIP archive\r
- structure is documented in the PKWARE Inc. APPNOTE.TXT:\r
- http://www.pkware.com/documents/casestudies/APPNOTE.TXT\r
-\r
- The table below shows some typical -l report entries:\r
-\r
- Perm/Prot Zver Ofs UncSize At CmpSize Cmth ModDate Mtime Name\r
- ----------+----+---+-------+--+-------+----+---------------+----------\r
- -rw-a-- 3.1 fat 211916 tx 53467 defX 10-Jun-18 00:27 zip3/zip.c\r
- -rwxr-x--- 3.1 unx 709 Tx 311 aesw 11-Aug-21 22:20 endian.c\r
- RWED,RE, 3.1 vms 6656 bx 2295 defN 07-Aug-15 14:12 it/T.EXE;8\r
-\r
- Field 1 (Perm/Prot) shows the file permission/protection attributes,\r
- formatted according to the original operating system or file system\r
- where the archive was created.\r
-\r
- Field 2 (Zver) shows the (approximate) version of the Zip program\r
- which created the archive.\r
-\r
- Field 3 (Ofs) shows the original operating system where the archive\r
- was created, or the file system on which the member file was stored.\r
-\r
- Field 4 (UncSize) shows the original, uncompressed file size.\r
-\r
- Field 5 (At) shows some archive member attributes, as detailed in\r
- the tables below. The first character indicates whether a file was\r
- binary or text, and whether it was encrypted. The second character\r
- indicates the presence of a data descriptor and/or an extra field in\r
- the member data.\r
-\r
- | File Type Extra Field |\r
- First char | binary text yes no | Second char\r
- --------------+-------+----- ------+-----+--------------------\r
- Encrypted no | b t x - | no Data Descriptor\r
- yes | B T X l | yes\r
-\r
- A Data Descriptor holds CRC and size data at an alternate place in\r
- the archive (after processed member data instead of before), and is\r
- normally used when the archiving program can't seek in the output\r
- archive data/file. An Extra Field can hold a wide variety of data,\r
- including 64-bit file sizes, many kinds of OS-specific attribute\r
- data, UTC times, and so on.\r
-\r
- Field 6 (CmpSize) shows the compressed file size. With -m, this\r
- field shows the compression fraction as a percentage. With -s (the\r
- default), this field is omitted. This compressed size value (unlike\r
- the one in an "unzip -l" report) includes all the overhead resulting\r
- from Traditional encryption.\r
-\r
- Field 7 (Cmth) shows the compression method used. Note that AES_WG\r
- encryption is treated as a compression method here. Not all of the\r
- methods shown in the table below are supported. (Some are\r
- obsolete.)\r
-\r
- Num Abbr Name, description\r
- ----+----+------------------------------------------------------------\r
- 0 stor Store (no compression)\r
- 1 shrk Shrink\r
- 2 re:1 Reduce (factor 1)\r
- 3 re:2 Reduce (factor 2)\r
- 4 re:3 Reduce (factor 3)\r
- 5 re:4 Reduce (factor 4)\r
- 6 i#:# Implode (dictonary_size:Shannon-Fano_trees)\r
- 7 tokn Tokenize\r
- 8 def# Deflate (N: normal, X: maximum, F: fast, S: super-fast)\r
- 9 d64# Deflate64 (N: normal, X: maximum, F: fast, S: super-fast)\r
- 10 dcli PKWARE Data Compression Library Imploding - IBM TERSE (old)\r
- 12 bzp2 bzip2\r
- 14 lzma LZMA\r
- 18 ters IBM TERSE (new)\r
- 19 lz77 IBM LZ77 z Architecture (PFS)\r
- 96 jpeg JPEG\r
- 97 wavp WavPack\r
- 98 ppmd PPMd version I, Rev 1\r
- 99 aesw AES_WG encryption\r
-\r
- Fields 8 and 9 (ModDate, Mtime) show the file modification date-time\r
- (MS-DOS format, local time).\r
-\r
- Field 10 (Name) shows the file path/name.\r
-3 Environment_Options\r
- ZipInfo's default behavior may be modified by placing command-line\r
- options in an environment variable. This can be done with any\r
- option, but it is probably most useful options like -T (decimal time\r
- format) or one of the non-default Unix format options: -l, -m.\r
-\r
- For ZipInfo ("unzip -Z"), the environment variable name on VMS is\r
- ZIPINFO_OPTS (non-VMS: ZIPINFO). For compatibility with Zip, if\r
- ZIPINFO_OPTS is not defined, then ZipInfo will use ZIPINFOOPT the\r
- same way.\r
-\r
- For example, to make the default format the long Unix format instead\r
- of the short Unix format, one could use commands like the following:\r
-\r
- Unix Bourne (or similar) shell:\r
- ZIPINFO='-l'; export UNZIP\r
-\r
- Unix C shell:\r
- setenv ZIPINFO '-l'\r
-\r
- OS/2 or MS-DOS:\r
- set ZIPINFO="-l"\r
-\r
- VMS (with quotation to preserve lower case in DCL):\r
- define ZIPINFO_OPTS "-l" ! Logical name, or\r
- ZIPINFO_OPTS = "-l" ! DCL symbol. (Either works.)\r
-\r
- Environment options are treated the same as any other command-line\r
- options, except that they are effectively the first options on the\r
- command line. To override an environment option, one may use an\r
- explicit option to cancel or override it. For example, to disable\r
- the totals trailer line by default, one could use commands like the\r
- following:\r
-\r
- Unix Bourne (or similar) shell:\r
- ZIPINFO='-t-'; export ZIPINFO\r
-\r
- Unix C shell:\r
- setenv ZIPINFO '-t-'\r
-\r
- VMS (with quotation to preserve lower case in DCL):\r
- define ZIPINFO_OPTS "-t-" ! Logical name, or\r
- ZIPINFO_OPTS = "-t-" ! DCL symbol. (Either works.)\r
-\r
- The examples show short (one-character) options, but long ("--")\r
- options are also allowed.\r
-3 Examples\r
- To get a basic, short-format listing of the complete contents of a\r
- ZIP archive zip31c.zip, with both header and totals lines, use only\r
- the archive name as an argument to zipinfo:\r
-\r
- zipinfo zip31c.zip\r
- zipinfo zip31c\r
-\r
- To produce a basic, long-format listing (not verbose), including\r
- header and totals lines, use -l:\r
-\r
- zipinfo -l zip31c.zip\r
-\r
- To list the complete contents of the archive without header and\r
- totals lines, either negate the -h and -t options or else specify\r
- the contents explicitly:\r
-\r
- zipinfo -h- -t- zip31c.zip\r
- zipinfo zip31c.zip *\r
-\r
- (On a Unix system, the wildcard member name would typically need to\r
- be quoted to keep a a Unix shell from expanding ("globbing") it.\r
- This is not necessary on VMS.)\r
-\r
- To list information on a single archive member, in medium format,\r
- specify the member name explicitly:\r
-\r
- zipinfo -m unzip60.zip */unshrink.c\r
-\r
- When any member name is specified, the header and totals trailer\r
- are, by default, not included in the report, but explicitly\r
- specifying -h and/or -t will restore them. For example:\r
-\r
- zipinfo -m -t unzip610b.zip *.[ch] */Make*\r
-\r
- On a Unix system, one could use the -T option along with an external\r
- sorting program (and another filter like "head" or "tail") to get a\r
- listing of the least or most recently modified files in the archive:\r
-\r
- zipinfo -l -T -h- -t- zip31c.zip | sort -k 8 | head -12\r
- zipinfo -l -T -h- -t- zip31c.zip | sort -r -k 8 | head -12\r
-\r
- The "sort" option "-k 8" tells it to sort on field 8, which is the\r
- date-time field in a long- or medium-format (-l, -m) ZipInfo report.\r
- (Use "-k 7" for the short (-s) format.) The -r option reverses the\r
- default smallest-to-largest sort order.\r
-3 Bugs\r
- As with UnZip, ZipInfo's -M ("--more") option is overly simplistic\r
- in its handling of screen output. As noted above, it fails to\r
- detect the wrapping of long lines and may thereby cause lines at the\r
- top of the screen to be scrolled off before being read. ZipInfo\r
- should detect and treat each occurrence of line-wrap as one\r
- additional line printed. This requires knowledge of the screen's\r
- width as well as its height. In addition, ZipInfo should detect the\r
- true screen geometry on all systems.\r
-\r
- The interactions among the various listing format, header, and\r
- trailer options (-h, -l, -m, -s, -t) are unnecessarily complex and\r
- should be simplified, despite the potential disruption to current\r
- users.\r
-3 URL\r
- The Info-ZIP main Web page is:\r
- http://www.info-zip.org/\r
-\r
- FTP access is available, too:\r
- ftp://ftp.info-zip.org/pub/infozip/\r
+++ /dev/null
-1 UNZIP\r
- UnZip lists, tests, or extracts files from a ZIP archive (an\r
- archive format commonly used on many different systems). The\r
- default behavior (with no options) is to extract into the current\r
- directory (and subdirectories below it) all files from the\r
- specified ZIP archive. A companion program, Zip, creates ZIP\r
- archives.\r
-\r
- Info-ZIP UnZip and Zip were intended to be compatible with archives\r
- created by PKWARE's PKZIP and PKUNZIP programs (originally for\r
- MS-DOS), but in many cases the program options or default behaviors\r
- differ. Nowadays, many other programs are available which work\r
- with ZIP archives.\r
-\r
- This help file describes the VMS CLI edition of UnZip. A\r
- Unix-style command-line edition is also available, with a separate\r
- help file.\r
-\r
- The VMS CLI edition of UnZip adds a command-line translator to the\r
- normal UnZip program. This translator transforms a set of\r
- VMS-style qualifiers and parameters into an equivalent set of\r
- Unix-style options and parameters, and then passes those\r
- transformed arguments to UnZip's standard Unix-style command-line\r
- processor. The documentation often shows the related Unix-style\r
- options in parentheses after a VMS-style qualifier. For example:\r
- /HELP (-h, -hh).\r
-\r
- Format:\r
-\r
- UNZIP [/unzip_qualifiers] [file[.zip]] [member [,...]]\r
-\r
- UNZIP /ZIPINFO [/zipinfo_qualifiers] [file[.zip]] [member [,...]]\r
-\r
- ZIPINFO [/zipinfo_qualifiers] [file[.zip]] [member [,...]]\r
-\r
- To display the basic built-in help, use the command:\r
-\r
- UNZIP /HELP\r
-\r
- To display the extended built-in help, use the command:\r
-\r
- UNZIP /HELP=EXTENDED\r
-\r
- The built-in help may be more current than this help file,\r
- especially between full product releases.\r
-\r
- The VMS CLI edition of the program can also provide built-in help\r
- on the Unix-style command-line edition; just use the "-h" or "-hh"\r
- options.\r
-2 Command_Parameters\r
- file[.zip]\r
-\r
- File path/name of a ZIP archive. A wildcard name may be used to\r
- specify multiple ZIP archives to be processed in one command.\r
- On VMS systems, any of the standard wildcards for a\r
- directory/file specification may be used: "...", "*", or "%"\r
- (or, since VMS V7.2, "?"). The default archive file\r
- specification is ".ZIP".\r
-\r
- Note that a ".zip" or ".ZIP" file type on an archive is merely a\r
- convention, not a requirement. For example, a self-extracting\r
- ZIP archive named "fred" or "fred.exe" could be processed as if\r
- it were an ordinary archive; just specify the actual file name\r
- with its actual name ending (if any), whatever that may be.\r
-\r
- member [,...]\r
-\r
- An optional list of archive members to be processed, separated\r
- by commas. If no member list is specified, then all archive\r
- members are processed. Unix-like ("globbing") wildcard patterns\r
- may be used to match multiple members:\r
-\r
- * Matches a sequence of 0 or more characters.\r
- ? Matches exactly 1 character.\r
- [...] Matches any single character found inside the brackets.\r
- Ranges are specified by a beginning character, a hyphen,\r
- and an ending character. If an exclamation point ("!")\r
- or a caret ("^") follows the left bracket, then the\r
- range of characters within the brackets is complemented.\r
- That is, anything except the characters inside the\r
- brackets is considered a match. To specify a literal\r
- left bracket, use the three-character sequence "[[]".\r
-2 Qualifiers_Primary_mode\r
- Qualifiers in this group specify the primary mode of operation of\r
- UnZip. Only one of these primary mode qualifiers may be specified.\r
-3 /COMMENT (-z)\r
- Primary mode. Display only the archive comment.\r
-3 /FRESHEN (-f)\r
- Primary Mode. Freshen existing files. That is, extract only those\r
- files that already exist on disk and that are newer than the disk\r
- copies. By default UnZip queries before overwriting, but the\r
- /EXISTING (-o) option may be used to suppress the queries.\r
-3 /HELP (-h, -hh)\r
- /HELP [=NORMAL]\r
- /HELP=EXTENDED\r
-\r
- Primary Mode. Display brief (roughly 24 lines) usage instructions\r
- (NORMAL, the default), or EXTENDED help (more complete usage\r
- instructions).\r
-3 /LICENSE (--license)\r
- Primary Mode. Display the Info-ZIP license.\r
-3 /LIST (-l)\r
- Primary Mode. List archive members. By default, a brief format is\r
- used, which includes the following items: member name,\r
- uncompressed file size ("Length"), and modification date-time of\r
- the member. A summary is included at the end of the report,\r
- showing total size and count for all the members in the report.\r
- Specifying a member list limits the report to those members.\r
-\r
- Adding /VERBOSE to an "UNZIP /LIST" command line adds the following\r
- items to the report: compression method, compressed size ("Size"),\r
- compression ratio, and 32-bit CRC.\r
-\r
- In contrast to some other programs, UnZip does not include the\r
- 12-byte encryption header in the compressed size values for a\r
- Traditionally encrypted member. Therefore, compressed size and\r
- compression ratio figures are independent of the member's\r
- encryption status and show the correct compression performance.\r
- (The complete size of the encrypted compressed data stream for\r
- archive members is reported by the more verbose ZipInfo reports.\r
- See ZipInfo.\r
-\r
- If UnZip was built with OS2_EAS enabled, then the /LIST report also\r
- includes the sizes of stored OS/2 extended attributes (EAs) and\r
- OS/2 access control lists (ACLs). In addition, the archive comment\r
- and individual member comments (if any) are displayed.\r
-\r
- If a file was archived from a single-case file system (for example,\r
- the old MS-DOS FAT file system) and the /NAMES=DOWNCASE option was\r
- given, the filename is converted to lowercase and is shown prefixed\r
- with a caret (^).\r
-\r
- Note: If only /VERBOSE is specified with an archive name, then\r
- UnZip acts as if "/LIST /VERBOSE" were specified, and a detailed\r
- listing is generated.\r
-3 /PIPE (-p)\r
- Primary Mode. Extract files to stdout (pipe). Only the actual\r
- file data for the members are sent to stdout (no file names, or\r
- other information, as would be displayed with /SCREEN (-c), and the\r
- files are always extracted in binary format, just as they are\r
- stored (no conversions). See also /SCREEN.\r
-3 /SCREEN (-c)\r
- Primary Mode. Extract files to stdout/screen. This option is\r
- similar to the /PIPE (-p) option except that the name of each file\r
- is displayed as it is extracted, and the /TEXT (-a) option is\r
- allowed, which can provide automatic ASCII-EBCDIC conversion, where\r
- appropriate. See also /PIPE.\r
-3 /TEST (-t)\r
- Primary Mode. Test archive members. Testing means that each\r
- archive member is extracted in memory (expanding and decrypting, as\r
- needed), but not written to a file. The resulting CRC (cyclic\r
- redundancy check, an enhanced checksum) of the extracted data is\r
- then compared with the original file's stored CRC value, and an\r
- error message is emitted if a CRC mismatch is detected.\r
-\r
- Adding /VERBOSE (-v) to /TEST adds some diagnostic information to\r
- the report for archive members with LZMA or PPMd compression.\r
-3 /TIMESTAMP (-T)\r
- Primary Mode. Set the timestamp on the archive(s) to that of the\r
- newest file in each one. This corresponds to Zip's /APPEND /LATEST\r
- (-go) option, except that it can be used on wildcard archives (for\r
- example, "unzip -T *.zip"), and is much faster.\r
-3 /UPDATE (-u)\r
- Primary mode. Update existing files and create new ones if needed.\r
- This mode performs the same function as the Freshen (/FRESHEN, -f)\r
- mode, extracting (with query) files that are newer than those with\r
- the same name on disk, but it also extracts those files that do not\r
- already exist on disk.\r
-3 /VERBOSE (-v)\r
-\r
- Primary mode (when alone) or option. When used as a primary mode\r
- (alone), and no archive is specified, an "UNZIP /VERBOSE" command\r
- generates a report showing the program version, build options, and\r
- relevant envrironment variables.\r
-\r
- When used with some other primary mode option, /VERBOSE can make\r
- output more verbose (detailed).\r
-\r
- If no other primary mode is specified, and an archive is specified,\r
- then UnZip acts as if "/LIST /VERBOSE" were specified, and a\r
- detailed listing is generated. See Qualifiers_Primary_mode,\r
- particularly /LIST.\r
-2 Qualifiers_Ordinary\r
- Qualifiers in this group modify the operation of UnZip.\r
-3 /AUTO_DIRECTORY (-da)\r
- /NOAUTO_DIRECTORY (default)\r
- /AUTO_DIRECTORY[=REUSE]\r
-\r
- Specifies a destination directory for extracted files which is\r
- derived from the base name of the archive. By default, files are\r
- extracted (and subdirectories created) in the current default\r
- directory. With /AUTO_DIRECTORY, UnZip automatically derives a\r
- subdirectory name from the archive name, creates that subdirectory,\r
- and extracts files into that subdirectory.\r
-\r
- For example, with /AUTO_DIRECTORY, extraction of "fred.zip" is done\r
- into subdirectory "[.fred]" instead of into the current directory.\r
- (On non-VMS systems, subdirectory "fred".)\r
-\r
- Using this option can help to avoid cluttering the current\r
- directory with files extracted from an archive whose structure does\r
- not include a top-level directory.\r
-\r
- If -da is specified as a default option in an environment variable,\r
- it can be overridden by either a /NOAUTO_DIRECTORY qualifier or an\r
- explicit /DIRECTORY=dest_dir qualifier. See also /DIRECTORY.\r
-3 /BINARY (-b, -bb)\r
- /BINARY[=keyword]\r
- /NOBINARY (Default.)\r
-\r
- Selects the file record format used when extracting binary files.\r
-\r
- The optional keywords are:\r
-\r
- ALL Extract all files with fixed-length, 512-byte record\r
- format. (-bb)\r
- AUTO Extract binary files with fixed-length, 512-byte\r
- record format. (Default value keyword: "/BINARY" is\r
- equivalent to "/BINARY=AUTO".) (-b)\r
- NONE Same as /NOBINARY. Extract binary files with\r
- Stream_LF record format. (Default condition.)\r
-\r
- Zip (or a similar archiving program) identifies files as "binary"\r
- or "text" when they are archived. (A short-format ZipInfo report\r
- denotes a binary file with a "b", and a text file with a "t".)\r
-\r
- [VMS] On VMS, for archives with VMS attribute information (made\r
- with "zip -V", "ZIP /VMS"), files are always created with their\r
- original record formats. For archives without VMS attribute\r
- information (not made with "zip -V", "ZIP /VMS"), files are\r
- normally created with Stream_LF record format. With\r
- /BINARY[=AUTO], binary files are created with fixed-length,\r
- 512-byte record format. With /BINARY=ALL, all files are created\r
- with fixed-length, 512-byte record format. When extracting to\r
- standard output (/PIPE or /SCREEN in effect), the default\r
- conversion of text record delimiters is disabled for binary files\r
- (with /BINARY[=AUTO]), or for all files (with /BINARY=ALL).\r
-\r
- /BINARY may conflict or interact with /TEXT. A combination of\r
- /BINARY[=AUTO] and /TEXT[=AUTO] is allowed. (See /TEXT.)\r
-3 /BRIEF\r
- Deprecated. Ignored. A no-op place-holder, originally intended as\r
- an opposite of /FULL (also deprecated). See\r
- Qualifiers_Primary_mode, particularly /LIST and /VERBOSE.\r
-3 /CASE_INSENSITIVE (-C)\r
- /CASE_INSENSITIVE\r
- /NOCASE_INSENSITIVE (default)\r
-\r
- Deprecated. Use /MATCH=CASE.\r
-\r
- With /CASE_INSENSITIVE, match member names case-blindly.\r
-3 /DIRECTORY (-d)\r
- /DIRECTORY=dest_dir\r
-\r
- Specifies a destination directory for extracted files. By default,\r
- files are extracted (and subdirectories created) in the current\r
- default directory. With "/DIRECTORY=dest_dir", extraction is done\r
- into the specified directory, instead.\r
-\r
- [VMS] On VMS, only a VMS-style device:[directory] specification is\r
- permitted.\r
-3 /DOT_VERSION (-Y)\r
- [VMS] Treat archive member name endings of ".nnn" (where "nnn" is a\r
- decimal number) as if they were VMS version numbers (";nnn"). (The\r
- default is to treat them as file types.) For example:\r
-\r
- "a.b.3" -> "a.b;3"\r
-3 /EXCLUDE (-x)\r
- /EXCLUDE=(member [,...])\r
-\r
- An optional list of archive members to be excluded from processing.\r
- Because wildcard characters normally match "/" directory separators\r
- (for exceptions see /MATCH=[NO]WILD_MATCH_SLASH (-W)), this option\r
- may be used to exclude any files that are in subdirectories. For\r
- example,\r
- UNZIP foo *.[ch] /EXCLUDE = */*\r
- would extract all C source files (*.c, *.h) in the main directory,\r
- but none in any subdirectories. Without the /EXCLUDE option, all C\r
- source files in all directories within the archive would be\r
- extracted.\r
-\r
- Note that archive members are specified using the Unix-style names\r
- which are used in ZIP archives, not VMS-style names.\r
-3 /EXISTING (-n, -o)\r
- /EXISTING[=keyword]\r
-\r
- Specifies the action when extracting files, and a file already\r
- exists.\r
-\r
- The optional keywords are:\r
-\r
- NEW_VERSION Create a new version of an existing file. (-o)\r
- OVERWRITE Overwrite an existing file. (-oo)\r
- NOEXTRACT Do not extract. Leave an existing file intact. (-n)\r
-\r
- By default, UnZip queries the user before extracting any file that\r
- already exists.\r
-\r
- [Non-VMS] On non-VMS systems, the user may choose to overwrite only\r
- the current file, overwrite all files, skip extraction of the\r
- current file, skip extraction of all existing files, or rename the\r
- current file (choose a new name for the extracted file).\r
-\r
- [VMS] On VMS, the usual query choices are to create a new version\r
- of an existing file, to skip extraction, or to rename the current\r
- file. In the case where an archive member name includes a version\r
- number, and /VERSION (-V, "retain VMS file version numbers") is in\r
- effect, then an additional query choice is offered: to overwrite\r
- the existing file.\r
-3 /FULL (-v)\r
- /FULL\r
- /FULL=DIAGNOSTICS\r
-\r
- Deprecated. Adds detail to a /LIST report. See\r
- Qualifiers_Primary_mode, particularly /LIST and /VERBOSE, and\r
- Qualifiers_Ordinary, particularly /VERBOSE.\r
-3 /JAR (--jar)\r
- Treat archive(s) as Java JAR. Over-simplification in Java JAR\r
- archives can cause UnZip to transform UTF-8 file names according to\r
- inappropriate (MS-DOS) rules, yielding corrupt names on extracted\r
- files (typically those with ASCII codes 128-255). Archives\r
- containing a Java "CAFE" extra field should be detected\r
- automatically, and handled correctly, but not all JAR archives\r
- include that extra field. Specifying /JAR tells UnZip to expect\r
- UTF-8 file names, regardless of whether the archive contains a\r
- "CAFE" extra field.\r
-3 /JUNK_DIRS (-j)\r
- /NOJUNK_DIRS (Default.)\r
- /JUNK_DIRS[=depth]\r
-\r
- Junk directories on extracted files. With /JUNK_DIRS, all\r
- directory information is stripped from an archive member name, so\r
- all files are extracted into the destination directory. (See also\r
- /DIRECTORY.)\r
-\r
- If a depth ("=depth", where "depth" is a positive integer) is\r
- specified, then that number of directory levels will be stripped\r
- from an archive member name. For example, an archive member like\r
- "a/b/c/d/ee.txt" would normally be extracted as "[.a.b.c.d]ee.txt".\r
- With /JUNK_DIRS, it would be extracted as "ee.txt". With\r
- /JUNK_DIRS=2, the first two directory levels would be stripped, so\r
- it would be extracted as "[.c.d]ee.txt".\r
-3 /LOWERCASE (-L)\r
- /[NO]LOWERCASE\r
-\r
- Deprecated. Use /NAMES=[NO]DOWNCASE.\r
-\r
- /LOWERCASE: Convert to lowercase any filename originating on an\r
- uppercase-only operating system or file system.\r
-\r
- /NOLOWERCASE: Do not convert to lowercase any filename originating\r
- on an uppercase-only operating system or file system.\r
-\r
- See also /UPPERCASE, which is also deprecated.\r
-3 /MATCH (-C, -W)\r
- /MATCH=(keyword, ...)\r
-\r
- Specifies name-matching behavior for names in the member list and\r
- the /EXCLUDE excluded-member list on the command line.\r
-\r
- The optional keywords and values are:\r
-\r
- CASE=BLIND Name matching is case-insensitive. (-C)\r
- CASE=SENSITIVE Name matching is case-sensitive. (Default.)\r
-\r
- By default, case-sensitive matching is done. For example,\r
- specifying "makefile" on the command line will match only\r
- "makefile" in the archive, not "Makefile" or "MAKEFILE". On many\r
- systems, the local file system is case-insensitive, so\r
- case-insensitive name matching would be more natural. With\r
- /MATCH=CASE=BLIND, "makefile" would match "makefile", "Makefile",\r
- or "MAKEFILE".\r
-\r
- /MATCH does not affect the search for the ZIP archive file(s), nor\r
- the matching of archive members to existing files on the extraction\r
- path. So, on a case-sensitive file system, UnZip will never try to\r
- overwrite a file "FOO" when extracting a member named "foo"!\r
-\r
- [WILD_STOP_AT_DIR] If the C macro WILD_STOP_AT_DIR is defined at\r
- build time, then an additional keyword is allowed:\r
-\r
- NOWILD_MATCH_SLASH Wildcards stop at directory slash. (-W)\r
- WILD_MATCH_SLASH Wildcards match directory slash. (Default.)\r
-\r
- By default, the wildcard characters "?" (single-character wildcard)\r
- and "*" (multi-character wildcard) match any character in a member\r
- path/name. /MATCH=NOWILD_MATCH_SLASH (-W) modifies the\r
- pattern-matching behavior for archive members so that both "?"\r
- (single-character wildcard) and "*" (multi-character wildcard) do\r
- not match the directory separator character "/". (The\r
- two-character sequence "**" acts as a multi-character wildcard that\r
- includes the directory separator in its matched characters.) For\r
- example, with /MATCH=NOWILD_MATCH_SLASH:\r
-\r
- "*.c" matches "foo.c" but not "mydir/foo.c"\r
- "**.c" matches both "foo.c" and "mydir/foo.c"\r
- "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c"\r
- "??*/*" matches "ab/foo" and "abc/foo"\r
- but not "a/foo" or "a/b/foo"\r
-\r
- This modified behavior is equivalent to the pattern matching style\r
- used by the shells of some of \fIUnZip\fP's supported target OSs\r
- (one example is Acorn RISC OS). This option may not be available\r
- on systems where the Zip archive's internal directory separator\r
- character "/" is allowed as regular character in native operating\r
- system filenames.\r
-\r
- [non-VMS] (Currently, UnZip uses the same pattern matching rules\r
- for both wildcard archive file name specifications and archive\r
- member selection patterns on most system types. For systems\r
- allowing "/" as regular filename character, the -W option would not\r
- work as expected on a wildcard file name specification.)\r
-3 /NAMES (-0 -2, -L, -s)\r
- /NAMES\r
- /NAMES=(keyword, ...)\r
-\r
- Selects name transformations during extraction. The keywords are:\r
-\r
- [NO]CHAR_SET CHAR_SET: Use CP850 character-set mapping on names\r
- of archive members which originated on a FAT or\r
- NTFS file system. (Default condition.)\r
- NOCHAR_SET: Do not map these archive member names.\r
- DOWNCASE Convert filenames from all-uppercase operating\r
- systems to lowercase. (-L)\r
- DOWNCASE=ALL Convert all filenames to lowercase. (-LL)\r
- ODS2 Restrict names to ODS2 conventions, regardless\r
- of the destination file system. (Invalid\r
- character -> "_".) (-2)\r
- [NO]SPACES SPACES: Permit space characters in (ODS5) names.\r
- (Default condition.)\r
- NOSPACES: Change spaces to underscores. (-s)\r
-\r
- The default is to use ODS5-compatible file names (including spaces)\r
- when the destination file system is ODS5, and to convert the names\r
- to ODS2-compatible names when the destination file system is ODS2.\r
-3 /OVERWRITE (-n, -o)\r
- /[NO]OVERWRITE\r
-\r
- Deprecated. Use /EXISTING.\r
-\r
- /OVERWRITE is equivalent to /EXISTING=NEW_VERSION.\r
- /NOOVERWRITE is equivalent to /EXISTING=NOEXTRACT.\r
-3 /PAGE (-M)\r
- Pipe all output through an internal pager similar to the Unix\r
- more(1) command. At the end of a screenful of output, UnZip pauses\r
- with a "--More--" prompt; the next screenful may be viewed by\r
- pressing the Enter (Return) key or the space bar. UnZip can be\r
- terminated by pressing the "Q" key and, on some systems, the\r
- Enter/Return key. Unlike Unix more(1), there is no\r
- forward-searching or editing capability. Also, UnZip doesn't\r
- notice if long lines wrap at the edge of the screen, effectively\r
- resulting in the printing of two or more lines and the likelihood\r
- that some text will scroll off the top of the screen before being\r
- viewed. If the actual number of lines on the screen can not be\r
- determined, 24 lines will be assumed.\r
-3 /PASSWORD (-P)\r
- /PASSWORD=password\r
-\r
- Use "password" to decrypt encrypted archive members (if any). THIS\r
- IS INSECURE! Many multi-user operating systems provide ways for\r
- any user to see the current command line of any other user. Even\r
- on stand-alone systems, there is always the threat of\r
- over-the-shoulder peeking. Storing the plaintext password as part\r
- of a command line in an automated script can be even less secure,\r
- Whenever possible, use the non-echoing, interactive prompt to enter\r
- passwords. Where security is truly important, use a strong\r
- encryption method, such as AES, instead of the relatively weak\r
- encryption provided by Traditional ZIP encryption. Or, use an\r
- external encryption program, such as GnuPG, before archiving the\r
- file. (Note that Zip will probably not be able to do significant\r
- compression on a file which has already been encrypted.)\r
-3 /QUIET (-q, -qq)\r
- /QUIET[=SUPER]\r
-\r
- Perform operations quietly. (/QUIET=SUPER: even more quietly).\r
-\r
- By default, UnZip prints the names of the files it's extracting or\r
- testing, the extraction methods, any member or archive comments\r
- that may be stored in the archive, and possibly a summary when\r
- finished with each archive. The /QUIET[=SUPER] options suppress\r
- the printing of some or all of these messages.\r
-3 /RESTORE (-D, -k, -ka, -X)\r
- /RESTORE[=(keyword, ...)]\r
-\r
- Selects restoration options for some meta-data. The optional\r
- keywords are:\r
-\r
- ACL Restore file ACL settings. (-ka)\r
- OWNER Restore file owner/UIC settings. (-X)\r
- PROTECTION = LIMITED Restore file UIC-based (SOGW) protection\r
- settings, respecting the current default\r
- protection. (Default.)\r
- PROTECTION = ORIGINAL Restore file UIC-based (SOGW) protection\r
- settings, ignoring the current default\r
- protection. (-k)\r
- NOPROTECTION Do not restore file UIC-based (SOGW) protection settings.\r
- The current default protection is used. (-k-)\r
- NODATE Do not restore any timestamps.\r
- DATE=ALL Restore timestamps for all extracted entries,\r
- files and directories.\r
- DATE=FILES Restore timestamps for extracted files. (Default.)\r
-\r
- By default, on VMS, UnZip restores the original date-time\r
- attributes for files, but not for directories. This agrees with\r
- the behavior of VMS BACKUP (and UnZip versions before 5.52 where\r
- the capability to restore directory timestamps was added).\r
-\r
- For compatibility with UnZip versions before 6.0 (5.53), the\r
- following deprecated short forms are still accepted:\r
-\r
- Deprecated form: Modern form:\r
- /RESTORE /RESTORE=PROTECTION\r
- /NORESTORE /RESTORE=NOPROTECTION\r
-3 /TEXT (-a, -aa, -S)\r
-\r
- /TEXT[=(keyword, ...)]\r
- /NOTEXT (Default.)\r
-\r
- The optional keywords are:\r
-\r
- ALL Extract all files with variable-length record format.\r
- Adjust line endings to local standard, and convert\r
- EBCDIC to ASCII, as needed. (-aa)\r
- AUTO Extract text files with variable-length record format.\r
- Adjust line endings to local standard, and convert\r
- EBCDIC to ASCII, as needed. (Default value keyword:\r
- "/TEXT" is equivalent to "/TEXT=AUTO".) (-a)\r
- NONE Same as /NOTEXT. Extract text files with Stream_LF\r
- record format without conversions. (Default\r
- condition.)\r
- STMLF Use Stream_LF record format for text files (instead of\r
- variable-length record format) when ALL or AUTO is in\r
- effect. Adjust line endings to local standard, and\r
- convert EBCDIC to ASCII, as needed. (-S)\r
-\r
- Selects the file record format, character encoding, and line-ending\r
- type used when extracting text files.\r
-\r
- Zip (or a similar archiving program) identifies files as "binary"\r
- or "text" when they are archived. (A short-format ZipInfo report\r
- denotes a binary file with a "b", and a text file with a "t".)\r
- Zip's identification of text files may not be perfect, so UnZip\r
- prints "[binary]" or "[text]" as a visual check for each file it\r
- extracts with /TEXT. /TEXT=ALL forces all files to be extracted\r
- (and converted) as text, regardless of the supposed file type.\r
-\r
- [VMS] On VMS, for archives with VMS attribute information (made\r
- with "zip -V", "ZIP /VMS"), files are always created with their\r
- original record formats. For archives without VMS attribute\r
- information (not made with "zip -V", "ZIP /VMS"), all files are\r
- normally created with Stream_LF record format. With /TEXT[=AUTO],\r
- text files are normally created with variable-length record format,\r
- but adding STMLF gives them Stream_LF record format. Additionally,\r
- line endings (CR, LF, CR+LF, ..) are adjusted to the local\r
- standard, and EBCDIC is converted to ASCII. With /TEXT=ALL, all\r
- files are treated as text files, and processed as described above.\r
-\r
- See also /BINARY.\r
-3 /TRAVERSE_DIRS (-:)\r
- /[NO]TRAVERSE_DIRS (Default: /NOTRAVERSE_DIRS.)\r
-\r
- Allows UnZip to extract archive members into locations outside of\r
- the current extraction destination directory (and its\r
- subdirectories).\r
-\r
- For security reasons, UnZip normally removes "parent directory"\r
- path components ("../") from the path names of archive members as\r
- they are extracted. This safety feature (new for version 5.50)\r
- prevents UnZip from accidentally writing files to directories\r
- outside the current destination directory tree. /TRAVERSE_DIRS\r
- sets UnZip back to its previous, more liberal behavior, allowing\r
- exact extraction of archives that use "../" path components to\r
- create multiple directory trees at or above the level of the\r
- destination directory.\r
-\r
- Use this option with extreme caution.\r
-3 /UPPERCASE (-L)\r
- /[NO]UPPERCASE\r
-\r
- Deprecated. Use /NAMES=[NO]DOWNCASE.\r
-\r
- /UPPERCASE: Do not convert to lowercase any filename originating\r
- on an uppercase-only operating system or file system.\r
-\r
- /NOUPPERCASE: Convert to lowercase any filename originating on an\r
- uppercase-only operating system or file system.\r
-\r
- See also /LOWERCASE, which is also deprecated.\r
-3 /VERBOSE (-v)\r
- /VERBOSE[=(keyword, ...)]\r
-\r
- The optional keywords are:\r
-\r
- NORMAL Make a report more detailed/verbose. (Default value\r
- keyword: "/VERBOSE" is equivalent to\r
- "/VERBOSE=NORMAL".) (-v)\r
- MORE Enable special developer I/O diagnostics. See below.\r
- (-vv)\r
- COMMAND Enable special developer CLI diagnostics. See below.\r
-\r
- MORE and NORMAL may not be specified together. (MORE implies\r
- NORMAL.)\r
-\r
- When used with some primary mode options, /VERBOSE can make output\r
- more detailed/verbose. See also Qualifiers_Primary_mode,\r
- particularly /LIST.\r
-\r
- If no other primary mode is specified, and an archive is specified,\r
- then UnZip acts as if "/LIST /VERBOSE" were specified, and a\r
- detailed listing is generated. See Qualifiers_Primary_mode,\r
- particularly /LIST and /VERBOSE.\r
-\r
- /VERBOSE=MORE ("-vv") enables some VMS-specific I/O diagnostic\r
- messages, and is intended for use in program development, not in\r
- normal use.\r
-\r
- /VERBOSE=COMMAND causes UnZip to show the translated Unix-style\r
- command-line argument vector before processing it, and is intended\r
- for use in program development, not in normal use.\r
- /VERBOSE=COMMAND has no Unix-style equivalent.\r
-3 /VERSION (-V)\r
- [Non-CMS-MVS] Retain VMS file version numbers. VMS files can be\r
- stored with a version number, in the format "file.type;##", where\r
- "##" is a decimal number. By default the ";##" version numbers are\r
- stripped, but this option allows them to be retained. (On file\r
- systems that limit filenames to particularly short lengths, the\r
- version numbers may be truncated or stripped regardless of this\r
- option.)\r
-\r
- [Non-VMS] Note that before UnZip version 6.10, on a non-VMS system,\r
- a file with a name like "fred;123" would, by default, be extracted\r
- as "fred", even if the file did not originate on a VMS system (so\r
- that ";123" was probably not really a VMS version number).\r
- Beginning with UnZip version 6.10, the default behavior is to strip\r
- VMS version numbers only from files which were archived on a VMS\r
- system. To restore the old behavior, and always strip apparent VMS\r
- version numbers, explicitly negate the option: "-V-".\r
-3 /ZIPINFO (-Z)\r
- ZipInfo mode. With /ZIPINFO, the program runs in ZipInfo mode,\r
- which is used to display information about an archive and its\r
- members. Remaining options are interpreted as ZipInfo options. If\r
- used, /ZIPINFO must be the first qualifier on the command line.\r
- See ZipInfo_mode.\r
-2 Environment_Options\r
- UnZip's default behavior may be modified by placing Unix-style\r
- command-line options in an environment variable. (The VMS CLI\r
- translator acts only on the command line itself, not on the\r
- environment variables.) This can be done with any option, but it is\r
- probably most useful options like -a (/TEXT, auto-convert text\r
- files), -L (/NAMES, downcase file names from systems with all\r
- uppercase file names), -C (/MATCH=CASE=BLIND, use case-insensitive\r
- name matching), -q (/QUIET, quiet), -o (/EXISTING, always\r
- overwrite), or -n (/EXISTING, never overwrite).\r
-\r
- For UnZip, the environment variable name on VMS is UNZIP_OPTS\r
- (non-VMS: UNZIP). The name on VMS is different to avoid conflict\r
- with a foreign-command DCL symbol, UNZIP. For compatibility with\r
- Zip, if UNZIP_OPTS is not defined, then UnZip will use UNZIPOPT the\r
- same way.\r
-\r
- For ZipInfo ("UNZIP /ZIPINFO"), the environment variable name on\r
- VMS is ZIPINFO_OPTS (non-VMS: ZIPINFO). For compatibility with\r
- Zip, if ZIPINFO_OPTS is not defined, then ZipInfo will use\r
- ZIPINFOOPT the same way.\r
- For example, to make UnZip act as quietly as possible, only\r
- reporting errors, one could use commands like the following (with\r
- quotation to preserve lower case in DCL):\r
-\r
- define UNZIP_OPTS "-q -q" ! Logical name, or\r
- UNZIP_OPTS = "-q -q" ! DCL symbol. (Either works.)\r
-\r
- Environment options are treated the same as any other Unix-style\r
- command-line options, except that they are effectively the first\r
- options on the command line. Generally, the VMS CLI translator\r
- will override an environment option if an explicit corresponding\r
- VMS-style qualifier is specified.\r
-\r
- The examples show short (one-character) options, but long ("--")\r
- options are also allowed.\r
-2 Encryption_Decryption\r
- Zip and UnZip have long supported a relatively weak encryption\r
- method, which we call Traditional ZIP encryption. The source code\r
- for Traditional encryption is included in the source kits, and\r
- support for Traditional encryption is enabled by default.\r
- (Build-time C macro: CRYPT_TRAD.)\r
-\r
- Beginning with UnZip version 6.10 and Zip version 3.1, these\r
- programs also offer a stronger, Advanced Encryption Standard (AES)\r
- encryption method, which we call AES WinZip/Gladman (AES_WG)\r
- encryption. (The encryption code was supplied by Brian Gladman,\r
- and the archive format is intended to be compatible with that used\r
- by the WinZip program. WinZip is a registered trademark of WinZip\r
- International LLC.) The source code for AES_WG encryption is\r
- distributed in a separate kit (for export control reasons), and\r
- support for AES_WG encryption must be enabled explicitly at build\r
- time. (Build-time C macro: CRYPT_AES_WG.) See the INSTALL file in\r
- the source kit for details on how to enable AES_WG encryption (or\r
- how to disable Traditional encryption).\r
-\r
- For details on the WinZip AES scheme, see:\r
- http://www.winzip.com/aes_info.htm\r
-\r
- For information on the separate AES_WG source kit, see:\r
- ftp://ftp.info-zip.org/pub/infozip/crypt/\r
- ftp://ftp.info-zip.org/pub/infozip/crypt/README_AES_WG.txt\r
-\r
- Normally, encryption passwords are supplied by the user\r
- interactively when requested by the program. See /PASSWORD for a\r
- (less secure) method of specifying a password on the command line.\r
-\r
- With Traditional encryption, when decrypting, a password will be\r
- checked against header data, and used if it appears to be correct.\r
- The correct password will always check out against the header data,\r
- but there is a 1-in-256 chance that an incorrect password will as\r
- well. (This is a security feature of the PKWARE archive format; it\r
- helps prevent brute-force attacks that might otherwise gain a large\r
- speed advantage by testing only the header.) In the case that an\r
- incorrect password is given but it passes the header test anyway,\r
- either an incorrect CRC will be generated for the extracted data or\r
- else UnZip will fail during the extraction because the "decrypted"\r
- bytes do not constitute a valid compressed data stream.\r
-\r
- If the first password fails the header check on some file, UnZip\r
- will prompt for another password, and so on until all files are\r
- extracted. If a password is not known, entering a null password\r
- (that is, just a carriage return or "Enter") is taken as a signal\r
- to skip all further prompting. Only unencrypted files in the\r
- archive(s) will thereafter be extracted. (The situation is\r
- actually a little more complicated. Some old versions of Zip and\r
- ZipCloak allowed null passwords, so UnZip checks each encrypted\r
- file to see if the null password works. This may result in "false\r
- positives" and extraction errors, as noted above.)\r
-\r
- Archives encrypted with 8-bit-character passwords (for example,\r
- passwords with accented European characters) may not be portable\r
- across systems or to other archivers. This problem stems from the\r
- use of multiple encoding methods for such characters, including\r
- Latin-1 (ISO 8859-1) and OEM code page 850. DOS PKZIP 2.04g uses\r
- the OEM code page; Windows PKZIP 2.50 uses Latin-1 (and is\r
- therefore incompatible with DOS PKZIP; Info-ZIP uses the OEM code\r
- page on DOS, OS/2 and Win3.x ports but ISO coding (Latin-1 etc.)\r
- everywhere else; and Nico Mak's WinZip 6.x does not allow\r
- 8-bit-character passwords at all. UnZip 5.3 (or newer) attempts to\r
- use the default character set first (e.g., Latin-1), followed by\r
- the alternate one (e.g., OEM code page) to test passwords. On\r
- EBCDIC systems, if both of these fail, EBCDIC encoding will be\r
- tested as a last resort. (EBCDIC is not tested on non-EBCDIC\r
- systems, because there are no known archivers that encrypt using\r
- EBCDIC encoding.) ISO character encodings other than Latin-1 are\r
- not supported. The new addition of (partial) Unicode (UTF-8)\r
- support in UnZip 6.0 has not yet been adapted to the encryption\r
- password handling in UnZip. On systems that use UTF-8 as native\r
- character encoding, UnZip simply tries decryption with the native\r
- UTF-8 encoded password; the built-in attempts to check the password\r
- in translated encoding have not yet been adapted for UTF-8 support\r
- and will consequently fail.\r
-2 Examples\r
- To use UnZip to extract all members of the archive letters.zip into\r
- the current directory and subdirectories below it, creating any\r
- subdirectories as necessary:\r
-\r
- unzip letters\r
-\r
- To extract all members of letters.zip into the current directory\r
- only:\r
-\r
- unzip /junk_dirs letters\r
-\r
- To test letters.zip, printing only a summary message indicating\r
- whether the archive is OK or not:\r
-\r
- unzip /test /quiet letters\r
-\r
- To test all ".zip" archives in the current directory, printing only\r
- the summaries:\r
-\r
- unzip /test /quiet *.zip\r
-\r
- (On a Unix system, the wildcard member name would typically need to\r
- be quoted to keep a a Unix shell from expanding ("globbing") it.\r
- This is not necessary on VMS. However, a name with a slash ("/")\r
- character, such as "*/zip*.*", must be quoted. Otherwise, DCL may\r
- interpret the slash as introducing a qualifier, causing unexpected\r
- behavior or an "%CLI-W-IVQUAL, unrecognized qualifier" error.)\r
-\r
- The following command extracts to standard output all members of\r
- letters.zip whose names end in ".tex", auto-converting to the local\r
- end-of-line convention, in Stream_LF record format, and piping the\r
- output into TYPE /PAGE:\r
-\r
- pipe unzip /screen /text=(auto, stmlf) letters *.tex | \\r
- type /page sys$input\r
-\r
- To extract from source.zip all Fortran and C source files (*.f,\r
- *.c, *.h) and Makefile into the SYS$SCRATCH directory:\r
-\r
- unzip source.zip *.[fch] Makefile /directory = sys$scratch\r
-\r
- To extract all FORTRAN and C source files, regardless of case (for\r
- example, both *.c and *.C, and any makefile, Makefile, MAKEFILE or\r
- similar):\r
-\r
- unzip -C source.zip *.[fch] makefile /directory = sys$scratch\r
-\r
- The following command extracts only newer versions of the files\r
- already in the current directory, without querying. (Note: Be\r
- careful of extracting in one timezone an archive created in\r
- another. ZIP archives created by Zip versions before 2.1 contain\r
- no timezone information, and a "newer" file from an eastern\r
- timezone may, in fact, be older):\r
-\r
- unzip /freshen /existing=new_version sources\r
-\r
- To extract newer versions of the files already in the current\r
- directory and to create any files not already there (same caveat as\r
- previous example):\r
-\r
- unzip /update /existing=new_version sources\r
-\r
- To display a configuration report showing the program version, the\r
- OS and compiler used to build it, a list of optional features\r
- enabled at build time, and the values of all the relevant\r
- environment variables:\r
-\r
- unzip /verbose\r
-2 Exit_Status\r
- UnZip's exit status approximates the exit codes defined by PKWARE.\r
- On VMS, UnZip's UNIX-style exit values are translated into\r
- VMS-style status codes with facility code 1954 = %x7A2, and with\r
- the inhibit-message (%x10000000) and facility-specific (%x00008000)\r
- bits set:\r
-\r
- %x17A28001 normal exit\r
- %x17A28000 + 16*UnZip_error_code warnings\r
- %x17A28002 + 16*UnZip_error_code normal errors\r
- %x17A28004 + 16*UnZip_error_code fatal errors\r
-\r
- Note that multiplying the UNIX-style UnZip error code by 16 places\r
- it conveniently in the hexadecimal representation of the VMS exit\r
- code, "__" in %x17A28__s, where "s" is the severity code. For\r
- example, a missing archive might cause UnZip error code 9, which\r
- would be transformed into the VMS exit status %X17A28092.\r
-\r
- The UnZip VMS exit codes include severity values which approximate\r
- those defined by PKWARE, as shown in the following table:\r
-\r
- VMS UnZip\r
- severity err code Error description\r
- ----------+----------+----------------------------------------------\r
- Success 0 Normal. No errors or warnings detected.\r
- Warning 1 One or more warnings were encountered, but\r
- processing completed successfully. This\r
- includes archives where one or more (but not\r
- all) files were skipped because of an\r
- unsupported compression or encryption method,\r
- or a bad encryption password.\r
- Error 2 Error in the archive format. Processing may\r
- or may not have completed successfully.\r
- Fatal 3 Severe error in the archive format.\r
- Processing probably failed immediately.\r
- Fatal 4 Memory allocation failed in program\r
- initialization.\r
- Fatal 5 Memory allocation or terminal I/O failed in\r
- password processing.\r
- Fatal 6 Memory allocation failed while decompressing\r
- to disk.\r
- Fatal 7 Memory allocation failed while decompressing\r
- in memory.\r
- Fatal 8 Memory allocation failed. (Currently not\r
- used.)\r
- Error 9 Specified archive files were not found.\r
- Error 10 Invalid command-line options or parameters.\r
- Error 11 No matching files were found.\r
- Fatal 50 Disk (file system) filled during extraction.\r
- Fatal 51 Unexpected end-of-file while reading the\r
- archive.\r
- Error 80 User interrupt (Ctrl/C).\r
- Error 81 No files were processed, because of\r
- unsupported compression or encryption\r
- methods.\r
- Error 82 No files were processed, because of bad\r
- encryption password(s).\r
- Fatal 83 Large-file archive could not be processed by\r
- this small-file program.\r
-2 Bugs\r
- Multi-part archives are not yet supported, except in conjunction\r
- with Zip. (All parts must be concatenated together in order, and\r
- then "zip -F" (for Zip 2.x) or "zip -FF" (for Zip 3.x) must be\r
- performed on the concatenated archive in order to "fix" it. Also,\r
- zip 3.0 and later can combine multi-part (split) archives into a\r
- combined single-file archive using "zip -s- inarchive -O\r
- outarchive". See the zip manual page for more information.) This\r
- may be corrected in the next major release.\r
-\r
- Archives read from standard input are not yet supported, except\r
- with UnZip (and then only the first member of the archive can be\r
- extracted).\r
-\r
- Archives encrypted with 8-bit-character passwords (such as\r
- passwords with accented European characters) may not be portable\r
- across systems and/or other archivers. See also\r
- Encryption_Decryption.\r
-\r
- UnZip's -M ("--more") option tries to take into account automatic\r
- wrapping of long lines. However, the code may fail to detect the\r
- correct wrapping locations. First, TAB characters (and similar\r
- control sequences) are not taken into account, they are handled as\r
- ordinary printable characters. Second, depending on the actual\r
- system type, UnZip may not detect the true terminal/emulator\r
- geometry, but instead may rely on "commonly used" default\r
- dimensions. The correct handling of tabs would require the\r
- implementation of a query for the actual tab setup on the output\r
- terminal/emulator.\r
-\r
- [Unix] Unix special files such as FIFO buffers (named pipes), block\r
- devices and character devices are not restored even if they are\r
- somehow represented in the archive, nor are hard-linked files\r
- relinked. Basically, the only file types restored by UnZip are\r
- regular files, directories, and symbolic (soft) links.\r
-\r
- [OS/2] Extended attributes for existing directories are only\r
- updated if the -o ("--overwrite") option is given. This is a\r
- limitation of the operating system; because directories only have a\r
- creation time associated with them, UnZip has no way to determine\r
- whether the stored attributes are newer or older than those on\r
- disk. In practice this may mean a two-pass approach is required:\r
- first unpack the archive normally (with or without\r
- freshening/updating existing files), then overwrite just the\r
- directory entries (for example, "unzip -o foo */").\r
-2 URL\r
- The Info-ZIP main Web page is:\r
- http://www.info-zip.org/\r
-\r
- FTP access is available, too:\r
- ftp://ftp.info-zip.org/pub/infozip/\r
-2 ZipInfo_mode\r
- When /ZIPINFO is specified, the program runs in ZipInfo mode.\r
- Remaining options are interpreted as ZipInfo options. If used,\r
- /ZIPINFO must be the first qualifier on the command line.\r
-\r
- ZipInfo reports detailed information about a ZIP archive and its\r
- members. This information may include file access permissions,\r
- compression method, encryption method, version and operating system\r
- (or file system) of the archive-creating program, and so on. The\r
- default behavior (with no options) is to show a single-line entry\r
- for each member in the archive, with a header and a trailer\r
- providing summary information for the entire archive. The format\r
- is a cross between Unix "ls -l" and "UNZIP /LIST /VERBOSE" output.\r
- See Detailed_Description. ZipInfo is the same program as UnZip.\r
- (On Unix, "zipinfo" may be a link to "unzip". On VMS, "ZIPINFO" is\r
- normally a DCL symbol defined as "''UNZIP' /ZIPINFO".) However,\r
- ZipInfo support may have been disabled when UnZip was built.\r
-\r
- Format:\r
-\r
- ZIPINFO [/zipinfo_options] [file[.zip]] [member [,...]]\r
-\r
- UNZIP /ZIPINFO [/zipinfo_options] [file[.zip]] [member [,...]]\r
-3 Command_Parameters\r
- file[.zip]\r
-\r
- File path/name of a ZIP archive. A wildcard name may be used to\r
- specify multiple ZIP archives to be processed in one command.\r
- On VMS systems, any of the standard wildcards for a\r
- directory/file specification may be used: "...", "*", or "%"\r
- (or, since VMS V7.2, "?"). The default archive file\r
- specification is ".ZIP".\r
-\r
- Note that a ".zip" or ".ZIP" file type on an archive is merely a\r
- convention, not a requirement. For example, a self-extracting\r
- ZIP archive named "fred" or "fred.exe" could be processed as if\r
- it were an ordinary archive; just specify the actual file name\r
- with its actual name ending (if any), whatever that may be.\r
-\r
- member [,...]\r
-\r
- An optional list of archive members to be processed, separated\r
- by commas. If no member list is specified, then all archive\r
- members are processed. Unix-like ("globbing") wildcard patterns\r
- may be used to match multiple members:\r
-\r
- * Matches a sequence of 0 or more characters.\r
- ? Matches exactly 1 character.\r
- [...] Matches any single character found inside the\r
- brackets. Ranges are specified by a beginning\r
- character, a hyphen, and an ending character. If an\r
- exclamation point ("!") or a caret ("^") follows the\r
- left bracket, then the range of characters within\r
- the brackets is complemented. That is, anything\r
- except the characters inside the brackets is\r
- considered a match. To specify a literal left\r
- bracket, use the three-character sequence "[[]".\r
-3 Qualifiers_Primary_Format\r
- Qualifiers in this group specify the primary report format of\r
- ZipInfo. Only one of these primary format qualifiers may be\r
- specified.\r
-4 /LONG (-l)\r
- Primary Format. Show member info in long Unix "ls -l" format.\r
- Like the /MEDIUM format, except that the compressed size (in bytes)\r
- is printed instead of the compression ratio.\r
-4 /ONE_LINE (-2)\r
- Primary Format. Show member names only, one per line. Other\r
- report elements are allowed, if requested explicitly using /HEADER,\r
- /TOTALS, and/or /COMMENT.\r
-4 /MEDIUM (-m)\r
- Primary Format. Show member info in medium-length Unix "ls -l"\r
- format. Like the /SHORT format, except that the compression\r
- factor, expressed as a percentage, is also included.\r
-4 /SHORT (-s)\r
- Primary Format. Show member info in short Unix "ls -l" format.\r
- This is the default behavior, unless /HEADER or /TOTALS is\r
- specified.\r
-4 /VERBOSE (-v)\r
- Primary Format. The ZipInfo /VERBOSE report is very detailed, and\r
- mostly self-explanatory, but it does assume some familiarity with\r
- the ZIP archive format. It also includes the archive comment, if\r
- any. Extra fields in the central directory are broken down into\r
- subfields, with brief interpretations of recognized subfields (or\r
- abbreviated dumps of unrecognized subfields).\r
-3 Qualifiers_Ordinary\r
- Qualifiers in this group modify the operation or report format of\r
- ZipInfo.\r
-4 /COMMENT (-z)\r
- Include the archive comments (if any) in the report.\r
-4 /DECIMAL_TIME (-T)\r
- Show the file date-times in a sortable, all-numeric,\r
- "YYYYMMDD.hhmmss" format. The default date format is an\r
- alpha-numeric "YY-Mmm-DD hh:mm". For example ("/SHORT", "/SHORT\r
- /DECIMAL_TIME"):\r
-\r
- -rw-a-- 3.1 fat 211916 tx defX 10-Jun-18 00:27 zip31c/zip.c\r
- -rw-a-- 3.1 fat 211916 tx defX 20100618.002703 zip31c/zip.c\r
-4 /EXCLUDE (-x)\r
- /EXCLUDE=(member [,...])\r
- An optional list of archive members to be excluded from processing.\r
- Because wildcard characters normally match "/" directory separators\r
- (for exceptions see /WILD_SPAN (-W)), this option may be used to\r
- exclude any files that are in subdirectories. For example,\r
- UNZIP foo *.[ch] /EXCLUDE = */*\r
- would extract all C source files (*.c, *.h) in the main directory,\r
- but none in any subdirectories. Without the /EXCLUDE option, all C\r
- source files in all directories within the archive would be\r
- extracted.\r
-\r
- Note that archive members are specified using the Unix-style names\r
- which are used in ZIP archives, not VMS-style names.\r
-4 /HEADER (-h)\r
- Include a header in the report, showing the archive name, the\r
- archive size (in bytes), and the number of members in the archive.\r
-\r
- For the Unix-format reports (options /LONG, /MEDIUM, /SHORT), the\r
- header is included by default, if no archive members are specified.\r
- If /HEADER is specified alone, that is, without one of the\r
- Unix-format options, and without a member list, then only the\r
- header lines will be put out.\r
-3 /MATCH (-C, -W)\r
- /MATCH=(keyword, ...)\r
-\r
- Specifies name-matching behavior for names in the member list and\r
- the /EXCLUDE excluded-member list on the command line.\r
-\r
- The optional keywords and values are:\r
-\r
- CASE=BLIND Name matching is case-insensitive. (-C)\r
- CASE=SENSITIVE Name matching is case-sensitive. (Default.)\r
-\r
- By default, case-sensitive matching is done. For example,\r
- specifying "makefile" on the command line will match only\r
- "makefile" in the archive, not "Makefile" or "MAKEFILE". On many\r
- systems, the local file system is case-insensitive, so\r
- case-insensitive name matching would be more natural. With\r
- /MATCH=CASE=BLIND, "makefile" would match "makefile", "Makefile",\r
- or "MAKEFILE".\r
-\r
- /MATCH does not affect the search for the ZIP archive file(s), nor\r
- the matching of archive members to existing files on the extraction\r
- path. So, on a case-sensitive file system, UnZip will never try to\r
- overwrite a file "FOO" when extracting a member named "foo"!\r
-\r
- [WILD_STOP_AT_DIR] If the C macro WILD_STOP_AT_DIR is defined at\r
- build time, then an additional keyword is allowed:\r
-\r
- NOWILD_MATCH_SLASH Wildcards stop at directory slash. (-W)\r
- WILD_MATCH_SLASH Wildcards match directory slash. (Default.)\r
-\r
- By default, the wildcard characters "?" (single-character wildcard)\r
- and "*" (multi-character wildcard) match any character in a member\r
- path/name. /MATCH=NOWILD_MATCH_SLASH (-W) modifies the\r
- pattern-matching behavior for archive members so that both "?"\r
- (single-character wildcard) and "*" (multi-character wildcard) do\r
- not match the directory separator character "/". (The\r
- two-character sequence "**" acts as a multi-character wildcard that\r
- includes the directory separator in its matched characters.) For\r
- example, with /MATCH=NOWILD_MATCH_SLASH:\r
- "*.c" matches "foo.c" but not "mydir/foo.c"\r
- "**.c" matches both "foo.c" and "mydir/foo.c"\r
- "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c"\r
- "??*/*" matches "ab/foo" and "abc/foo"\r
- but not "a/foo" or "a/b/foo"\r
-\r
- This modified behavior is equivalent to the pattern matching style\r
- used by the shells of some of \fIUnZip\fP's supported target OSs\r
- (one example is Acorn RISC OS). This option may not be available\r
- on systems where the Zip archive's internal directory separator\r
- character "/" is allowed as regular character in native operating\r
- system filenames.\r
-\r
- [non-VMS] (Currently, UnZip uses the same pattern matching rules\r
- for both wildcard archive file name specifications and archive\r
- member selection patterns on most system types. For systems\r
- allowing "/" as regular filename character, the -W option would not\r
- work as expected on a wildcard file name specification.)\r
-4 /MEMBER_COUNTS (default) (-mc)\r
- /NOMEMBER_COUNTS\r
- Control inclusion of separate member counts for directories, files,\r
- and (if symlinks are supported) links, after the totals summary at\r
- the end of the report. By default, they are included. Use\r
- /NOMEMBER_COUNTS" to suppress them. See also /TOTALS.\r
-4 /PAGE (-M)\r
- Pipe all output through an internal pager similar to the Unix\r
- more(1) command. At the end of a screenful of output, UnZip pauses\r
- with a "--More--" prompt; the next screenful may be viewed by\r
- pressing the Enter (Return) key or the space bar. UnZip can be\r
- terminated by pressing the "Q" key and, on some systems, the\r
- Enter/Return key. Unlike Unix more(1), there is no\r
- forward-searching or editing capability. Also, UnZip doesn't\r
- notice if long lines wrap at the edge of the screen, effectively\r
- resulting in the printing of two or more lines and the likelihood\r
- that some text will scroll off the top of the screen before being\r
- viewed. If the actual number of lines on the screen can not be\r
- determined, 24 lines will be assumed.\r
-4 /TOTALS (-t)\r
- Include a totals summary at the end of the report, showing the\r
- number of members in the report, the sum of their uncompressed\r
- sizes, the sum of their compressed sizes, and the compression\r
- factor as a percentage.\r
-\r
- For the Unix-format reports (/LONG, /MEDIUM, /SHORT), the totals\r
- summary is included by default, if no archive members are\r
- specified. If /TOTALS is specified alone, that is, without one of\r
- the Unix-format options, and without a member list, then only the\r
- totals summary trailer lines will be put out.\r
-\r
- The total "bytes compressed" reported includes only the actual\r
- data, not the ZIP archive meta-data, so the size of the archive\r
- will always be greater than this value.\r
-\r
- See also /MEMBER_COUNTS.\r
-3 Detailed_Description\r
- ZipInfo has three basic report formats, providing different degrees\r
- of detail in the information about the members of an archive: a\r
- simple list of names (/ONE_LINE (-1, -2)), a Unix ls-style listing\r
- (/LONG (-l), /MEDIUM (-m), /SHORT (-s)), and a very detailed\r
- analysis (/VERBOSE (-v)). Some of the information, such as file\r
- sizes, is easy to interpret. Some of the information involves\r
- fairly obscure details of ZIP archive structure. ZIP archive\r
- structure is documented in the PKWARE Inc. APPNOTE.TXT:\r
- http://www.pkware.com/documents/casestudies/APPNOTE.TXT\r
-\r
- The table below shows some typical /LONG report entries:\r
-\r
- Perm/Prot Zver Ofs UncSize At CmpSize Cmth ModDate Mtime Name\r
- ----------+----+---+-------+--+-------+----+---------------+----------\r
- -rw-a-- 3.1 fat 211916 tx 53467 defX 10-Jun-18 00:27 zip3/zip.c\r
- -rwxr-x--- 3.1 unx 709 Tx 311 aesw 11-Aug-21 22:20 endian.c\r
- RWED,RE, 3.1 vms 6656 bx 2295 defN 07-Aug-15 14:12 it/T.EXE;8\r
-\r
- Field 1 (Perm/Prot) shows the file permission/protection\r
- attributes, formatted according to the original operating system or\r
- file system where the archive was created.\r
-\r
- Field 2 (Zver) shows the (approximate) version of the Zip program\r
- which created the archive.\r
-\r
- Field 3 (Ofs) shows the original operating system where the archive\r
- was created, or the file system on which the member file was\r
- stored.\r
-\r
- Field 4 (UncSize) shows the original, uncompressed file size.\r
-\r
- Field 5 (At) shows some archive member attributes, as detailed in\r
- the tables below. The first character indicates whether a file was\r
- binary or text, and whether it was encrypted. The second character\r
- indicates the presence of a data descriptor and/or an extra field\r
- in the member data.\r
-\r
- | File Type Extra Field |\r
- First char | binary text yes no | Second char\r
- --------------+-------+----- ------+-----+--------------------\r
- Encrypted no | b t x - | no Data Descriptor\r
- yes | B T X l | yes\r
-\r
- A Data Descriptor holds CRC and size data at an alternate place in\r
- the archive (after processed member data instead of before), and is\r
- normally used when the archiving program can't seek in the output\r
- archive data/file. An Extra Field can hold a wide variety of data,\r
- including 64-bit file sizes, many kinds of OS-specific attribute\r
- data, UTC times, and so on.\r
-\r
- Field 6 (CmpSize) shows the compressed file size. With /MEDIUM,\r
- this field shows the compression fraction as a percentage. With\r
- /SHORT (the default), this field is omitted. This compressed size\r
- value (unlike the one in an "UNZIP /LIST" report) includes all the\r
- overhead resulting from Traditional encryption.\r
-\r
- Field 7 (Cmth) shows the compression method used. Note that AES_WG\r
- encryption is treated as a compression method here. Not all of the\r
- methods shown in the table below are supported. (Some are\r
- obsolete.)\r
-\r
- Num Abbr Name, description\r
- ----+----+------------------------------------------------------------\r
- 0 stor Store (no compression)\r
- 1 shrk Shrink\r
- 2 re:1 Reduce (factor 1)\r
- 3 re:2 Reduce (factor 2)\r
- 4 re:3 Reduce (factor 3)\r
- 5 re:4 Reduce (factor 4)\r
- 6 i#:# Implode (dictonary_size:Shannon-Fano_trees)\r
- 7 tokn Tokenize\r
- 8 def# Deflate (N: normal, X: maximum, F: fast, S: super-fast)\r
- 9 d64# Deflate64 (N: normal, X: maximum, F: fast, S: super-fast)\r
- 10 dcli PKWARE Data Compression Library Imploding - IBM TERSE (old)\r
- 12 bzp2 bzip2\r
- 14 lzma LZMA\r
- 18 ters IBM TERSE (new)\r
- 19 lz77 IBM LZ77 z Architecture (PFS)\r
- 96 jpeg JPEG\r
- 97 wavp WavPack\r
- 98 ppmd PPMd version I, Rev 1\r
- 99 aesw AES_WG encryption\r
-\r
- Fields 8 and 9 (ModDate, Mtime) show the file modification\r
- date-time (MS-DOS format, local time).\r
-\r
- Field 10 (Name) shows the file path/name.\r
-3 Environment_Options\r
- ZipInfo's default behavior may be modified by placing Unix-style\r
- command-line options in an environment variable. (The VMS CLI\r
- translator acts only on the command line itself, not on the\r
- environment variables.) This can be done with any option, but it is\r
- probably most useful options like -T (/DECIMAL_TIME, decimal time\r
- format) or one of the non-default Unix format options: -l (/LONG),\r
- -m (/MEDIUM).\r
-\r
- For ZipInfo ("UNZIP /ZIPINFO", ZIPINFO), the environment variable\r
- name on VMS is ZIPINFO_OPTS (non-VMS: ZIPINFO). For compatibility\r
- with Zip, if ZIPINFO (ZIPINFO_OPTS on VMS) is not defined, then\r
- ZipInfo will use ZIPINFOOPT the same way.\r
-\r
- For example, to make the default format the long Unix format\r
- instead of the short Unix format, one could use commands like the\r
- following (with quotation to preserve lower case in DCL):\r
-\r
- define ZIPINFO_OPTS "-l" ! Logical name, or\r
- ZIPINFO_OPTS = "-l" ! DCL symbol. (Either works.)\r
-\r
- Environment options are treated the same as any other Unix-style\r
- command-line options, except that they are effectively the first\r
- options on the command line. Generally, the VMS CLI translator\r
- will override an environment option if an explicit corresponding\r
- VMS-style qualifier is specified.\r
-\r
- The examples show short (one-character) options, but long ("--")\r
- options are also allowed.\r
-3 Examples\r
- To get a basic, short-format listing of the complete contents of a\r
- ZIP archive zip31c.zip, with both header and totals lines, use only\r
- the archive name as an argument to zipinfo:\r
-\r
- zipinfo zip31c.zip\r
- zipinfo zip31c\r
-\r
- To produce a basic, long-format listing (not verbose), including\r
- header and totals lines, use /LONG:\r
-\r
- zipinfo /long zip31c.zip\r
-\r
- To list the complete contents of the archive without header and\r
- totals lines, either negate the /HEADER and /TOTALS qualifiers or\r
- else specify the contents explicitly:\r
-\r
- zipinfo /noheader /nototals zip31c.zip\r
- zipinfo zip31c.zip *\r
-\r
- (On a Unix system, the wildcard member name would typically need to\r
- be quoted to keep a a Unix shell from expanding ("globbing") it.\r
- This is not necessary on VMS. However, a name with a slash ("/")\r
- character, such as "*/zip*.*", must be quoted. Otherwise, DCL may\r
- interpret the slash as introducing a qualifier, causing unexpected\r
- behavior or an "%CLI-W-IVQUAL, unrecognized qualifier" error.)\r
-\r
- To list information on a single archive member, in medium format,\r
- specify the member name explicitly:\r
-\r
- zipinfo /medium unzip60.zip */unshrink.c\r
-\r
- On a VMS system, one could use /DECIMAL_TIME along with an external\r
- sorting program to get a listing of files in the archive in\r
- date-time order:\r
-\r
- pipe zipinfo /decimal_time /long /noheader /nototals zip31c.zip | -\r
- sort sys$input sys$output /key = (position:47, size:15, descend)\r
-\r
- For a /LONG (-l) format report, the date-time field should begin at\r
- position 47; for /MEDIUM (-m), 42; for /SHORT (-s), 38. HELP SORT\r
- [/KEY] should lead to an explanation of the various SORT options.\r
- (Unlike Unix, VMS does not include a useful "head" or "tail"\r
- program.)\r
-\r
- On a Unix system, one could use the -T option along with an\r
- external sorting program (and another filter like "head" or "tail")\r
- to get a listing of the least or most recently modified files in\r
- the archive:\r
-\r
- zipinfo -l -T -h- -t- zip31c.zip | sort -k 8 | head -12\r
- zipinfo -l -T -h- -t- zip31c.zip | sort -r -k 8 | head -12\r
-\r
- The "sort" option "-k 8" tells it to sort on field 8, which is the\r
- date-time field in a long- or medium-format (-l, -m) ZipInfo\r
- report. (Use "-k 7" for the short (-s) format.) The -r option\r
- reverses the default smallest-to-largest sort order.\r
-3 Bugs\r
- As with UnZip, ZipInfo's /PAGE (-M) option is overly simplistic in\r
- its handling of screen output. As noted above, it fails to detect\r
- the wrapping of long lines and may thereby cause lines at the top\r
- of the screen to be scrolled off before being read. ZipInfo should\r
- detect and treat each occurrence of line-wrap as one additional\r
- line printed. This requires knowledge of the screen's width as\r
- well as its height. In addition, ZipInfo should detect the true\r
- screen geometry on all systems.\r
-\r
- The interactions among the various listing format, header, and\r
- trailer options (/HEADER, /LONG, /MEDIUM, /SHORT, /TOTALS) are\r
- unnecessarily complex and should be simplified, despite the\r
- potential disruption to current users.\r
-3 URL\r
- The Info-ZIP main Web page is:\r
- http://www.info-zip.org/\r
-\r
- FTP access is available, too:\r
- ftp://ftp.info-zip.org/pub/infozip/\r
" compressed WinNT security data missing (%ld bytes)%s";
#ifndef SFX
- static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \
+ static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n\
EF block length (%ld bytes) exceeds remaining EF data (%ld bytes)\n";
+ static ZCONST char Far TooSmallEFlength[] = "bad extra-field entry:\n\
+ EF block length (%u bytes) invalid (< %d)\n";
static ZCONST char Far InvalidComprDataEAs[] =
" invalid compressed data for EAs\n";
# if defined(WIN32) && defined(NTSD_EAS)
} /* end while-loop (adding files to current block) */
- /* save position in central directory so can come back later */
+ /* Save position in central directory so can come back later. */
cd_bufstart = G.cur_zipfile_bufstart;
cd_inptr = G.inptr;
cd_incnt = G.incnt;
zusz_t bytes_put_out;
#ifdef IZ_CRYPT_AES_WG
- zoff_t g_csize_adj = 0; /* Temporary adjustment to G.csize. */
+ zoff_t g_csize_adj; /* Temporary adjustment to G.csize. */
+ int g_incnt_adj; /* Temporary adjustment to G.incnt. */
+
int aes_mac_mismatch;
ush temp_compression_method;
/* AES Message Authentication Code storage. Note that we're in
* trying to read the MAC data.
*/
g_csize_adj = MAC_LENGTH( G.pInfo->cmpr_mode_aes);
+ g_incnt_adj = g_csize_adj;
G.csize -= g_csize_adj;
+
+ /* If data have already been passed from G.csize to
+ * G.incnt, then shift the excess adjustment from
+ * G.csize to G.incnt.
+ */
+ if (G.csize < 0)
+ {
+ g_incnt_adj = -G.csize;
+ G.incnt += G.csize;
+ G.csize = 0;
+ }
}
# endif /* def IZ_CRYPT_AES_WG */
* trying to read the MAC data.
*/
g_csize_adj = MAC_LENGTH( G.pInfo->cmpr_mode_aes);
+ g_incnt_adj = g_csize_adj;
G.csize -= g_csize_adj;
+
+ /* If data have already been passed from G.csize to
+ * G.incnt, then shift the excess adjustment from
+ * G.csize to G.incnt.
+ */
+ if (G.csize < 0)
+ {
+ g_incnt_adj = -G.csize;
+ G.incnt += G.csize;
+ G.csize = 0;
+ }
}
# endif /* def IZ_CRYPT_AES_WG */
* trying to read the MAC data.
*/
g_csize_adj = MAC_LENGTH( G.pInfo->cmpr_mode_aes);
+ g_incnt_adj = g_csize_adj;
G.csize -= g_csize_adj;
+
+ /* If data have already been passed from G.csize to
+ * G.incnt, then shift the excess adjustment from
+ * G.csize to G.incnt.
+ */
+ if (G.csize < 0)
+ {
+ g_incnt_adj = -G.csize;
+ G.incnt += G.csize;
+ G.csize = 0;
+ }
}
# endif /* def IZ_CRYPT_AES_WG */
} /* end switch (compression method) */
#ifdef IZ_CRYPT_AES_WG
- if (g_csize_adj != 0)
- {
- /* Bump G.csize back up, so that NEXTBYTE doesn't quit
- * prematurely while collecting the file MAC data.
- */
- G.csize += g_csize_adj;
- }
-
if (G.lrec.compression_method == AESENCRED)
{
int i;
+ /* Adjust G.csize and/or G.incnt back up, so that NEXTBYTE
+ * doesn't quit prematurely while collecting the file MAC data.
+ */
+ G.csize += g_csize_adj;
+ G.incnt += g_incnt_adj;
+
/* Save the Message Authorization Code from the file data. */
for (i = 0; i < MAC_LENGTH( G.pInfo->cmpr_mode_aes); i++)
{
break;
aes_wg_mac_file[ i] = uichar;
}
+
/* Get the calculated MAC from the encryption package. */
i = fcrypt_end( aes_wg_mac_calc, G.zcx);
/* Verify MAC match. Record result. */
eb_id = makeword(ef);
eb_len = (unsigned)makeword(ef+EB_LEN);
- if (eb_len > (ef_len - EB_HEADSIZE)) {
+ if (eb_len > (ef_len - EB_HEADSIZE))
+ {
/* Discovered some extra field inconsistency! */
if (uO.qflag)
Info(slide, 1, ((char *)slide, "%-22s ",
eb_len, (ef_len - EB_HEADSIZE)));
return PK_ERR;
}
+ else if (eb_len < EB_HEADSIZE)
+ {
+ /* Extra block length smaller than header length. */
+ if (uO.qflag)
+ Info(slide, 1, ((char *)slide, "%-22s ",
+ FnFilter1(G.filename)));
+ Info(slide, 1, ((char *)slide, LoadFarString(TooSmallEFlength),
+ eb_len, EB_HEADSIZE));
+ return PK_ERR;
+ }
switch (eb_id) {
case EF_OS2:
if (compr_offset < 4) /* field is not compressed: */
return PK_OK; /* do nothing and signal OK */
+ /* Return no/bad-data error status if any problem is found:
+ * 1. eb_size is too small to hold the uncompressed size
+ * (eb_ucsize). (Else extract eb_ucsize.)
+ * 2. eb_ucsize is zero (invalid). 2014-12-04 SMS. (oCERT.org report.)
+ * 3. eb_ucsize is positive, but eb_size is too small to hold
+ * the compressed data header.
+ */
if ((eb_size < (EB_UCSIZE_P + 4)) ||
- ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L &&
- eb_size <= (long)(compr_offset + EB_CMPRHEADLEN)))
- return IZ_EF_TRUNC; /* no compressed data! */
+ ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) ||
+ ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))
+ return IZ_EF_TRUNC; /* no/bad compressed data! */
/* 2014-11-03 Michal Zalewski, SMS.
* For STORE method, compressed and uncompressed sizes must agree.
LzmaDec_Free( &G.state_lzma, &G.g_Alloc);
+ /* Advance the global input pointer to past the used data. */
+ G.inptr = next_in+ in_buf_size_len;
+
return sts;
}
#endif /* def LZMA_SUPPORT */
"warning: Converted unicode filename too long--truncating.\n";
#endif /* def UNICODE_SUPPORT */
+static ZCONST char Far ExtraFieldCorrupt[] =
+ "warning: extra field (type: 0x%04x) corrupt. Continuing...\n";
static ZCONST char Far ExtraFieldTooLong[] =
"warning: extra field too long (%d). Ignoring...\n";
static ZCONST char Far DiskFullMsg[] =
seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
(G.inptr-G.inbuf) + length);
} else {
- if (readbuf(__G__ (char *)G.extra_field, length) == 0)
+ /* 2014-11-13 pstodulk, SMS.
+ * http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=282
+ * Faulty archive data may cause use of unset data in the
+ * G.extra_field buffer.
+ */
+ unsigned int len_rb;
+
+ if ((len_rb = readbuf(__G__ (char *)G.extra_field, length)) == 0)
return PK_EOF;
- /* Looks like here is where extra fields are read */
- getZip64Data(__G__ G.extra_field, length);
+ if (len_rb < length)
+ {
+ /* Clear any unfilled bytes in the buffer,
+ * and pretend that we got all that we requested.
+ */
+ memset( (char *)G.extra_field+ len_rb, 0, (length- len_rb));
+ length = len_rb;
+ }
+ /* Looks like here is where extra fields are read. */
+ /* 2014-12-17 SMS. (oCERT.org report.)
+ * Added test to detect (and message to notify user of)
+ * bad Zip64 (EF_PKSZ64) extra field data.
+ */
+ if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
+ {
+ Info(slide, 0x401, ((char *)slide,
+ LoadFarString( ExtraFieldCorrupt), EF_PKSZ64));
+ error = PK_WARN;
+ }
#ifdef UNICODE_SUPPORT
/* 2013-02-11 SMS.
* Free old G.unipath_filename storage, if not already
/*
- Copyright (c) 1990-2013 Info-ZIP. All rights reserved.
+ Copyright (c) 1990-2014 Info-ZIP. All rights reserved.
See the accompanying file LICENSE, version 2003-May-08 or later
(the contents of which are also included in unzip.h) for terms of use.
#if (!defined(NO_TIMESTAMPS))
uO.D_flag = 1; /* Default to '-D', no restoration of dir timestamps. */
#endif
+#ifdef VMS
+ G.echo_orig = -1; /* Original terminal echo state (-1: unknown). */
+#endif
uO.lflag=(-1);
G.wildzipfn = "";
# ifdef VMS
FILE *msgfp; /* Message/prompt output file. */
+ int echo_orig; /* Original terminal echo state. */
# endif /* def VMS */
int incnt_leftover; /* so improved NEXTBYTE does not waste input */
/* Function getZip64Data() */
/*******************************/
-/* 2012-11-25 SMS. (OUSPG report.)
- * Changed eb_len and ef_len from unsigned to signed, to catch underflow
- * of ef_len caused by corrupt/malicious data. (32-bit is adequate.
- * Used "long" to accommodate any systems with 16-bit "int".)
- */
-
int getZip64Data(__G__ ef_buf, ef_len)
__GDEF
ZCONST uch *ef_buf; /* buffer containing extra field */
but it means that this procedure is only called in one place.
---------------------------------------------------------------------------*/
+/* 2012-11-25 SMS. (OUSPG report.)
+ * Changed eb_len and ef_len from unsigned to signed, to catch underflow
+ * of ef_len caused by corrupt/malicious data. (32-bit is adequate.
+ * Used "long" to accommodate any systems with 16-bit "int".)
+ *
+ * 2014-12-17 SMS. (oCERT.org report.)
+ * Added checks to ensure that enough data are available before calling
+ * makeint64() or makelong(). Replaced various sizeof() values with
+ * simple ("4" or "8") constants. (The Zip64 structures do not depend
+ * on our variable sizes.) Error handling is crude, but we should now
+ * stay within the buffer.
+ */
+
+#define Z64FLGS 0xffff
+#define Z64FLGL 0xffffffff
+
if (ef_len == 0 || ef_buf == NULL)
return PK_COOL;
Trace((stderr, "\ngetZip64Data: scanning extra field of length %ld\n",
ef_len));
- while (ef_len >= EB_HEADSIZE) {
- eb_id = makeword(EB_ID + ef_buf);
- eb_len = makeword(EB_LEN + ef_buf);
+ while (ef_len >= EB_HEADSIZE)
+ {
+ eb_id = makeword( EB_ID+ ef_buf);
+ eb_len = makeword( EB_LEN+ ef_buf);
- if (eb_len > (ef_len - EB_HEADSIZE)) {
- /* discovered some extra field inconsistency! */
+ if (eb_len > (ef_len- EB_HEADSIZE))
+ {
+ /* Extra block length exceeds remaining extra field length. */
Trace((stderr,
- "getZip64Data: block length %ld > rest ef_size %ld\n", eb_len,
- ef_len - EB_HEADSIZE));
+ "getZip64Data: block length %u > rest ef_size %u\n",
+ eb_len, (ef_len- EB_HEADSIZE)));
break;
}
- if (eb_id == EF_PKSZ64) {
+ if (eb_id == EF_PKSZ64)
+ {
int offset = EB_HEADSIZE;
- if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){
- G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf);
- offset += sizeof(G.crec.ucsize);
+ if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))
+ {
+ if (offset+ 8 > ef_len)
+ return PK_ERR;
+
+ G.crec.ucsize = G.lrec.ucsize = makeint64( offset+ ef_buf);
+ offset += 8;
}
- if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){
- G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf);
- offset += sizeof(G.crec.csize);
+
+ if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL))
+ {
+ if (offset+ 8 > ef_len)
+ return PK_ERR;
+
+ G.csize = G.crec.csize = G.lrec.csize = makeint64( offset+ ef_buf);
+ offset += 8;
}
- if (G.crec.relative_offset_local_header == 0xffffffff){
- G.crec.relative_offset_local_header = makeint64(offset + ef_buf);
- offset += sizeof(G.crec.relative_offset_local_header);
+
+ if (G.crec.relative_offset_local_header == Z64FLGL)
+ {
+ if (offset+ 8 > ef_len)
+ return PK_ERR;
+
+ G.crec.relative_offset_local_header = makeint64( offset+ ef_buf);
+ offset += 8;
}
- if (G.crec.disk_number_start == 0xffff){
- G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);
- offset += sizeof(G.crec.disk_number_start);
+
+ if (G.crec.disk_number_start == Z64FLGS)
+ {
+ if (offset+ 4 > ef_len)
+ return PK_ERR;
+
+ G.crec.disk_number_start = (zuvl_t)makelong( offset+ ef_buf);
+ offset += 4;
}
+
+ break; /* Expect only one EF_PKSZ64 block. */
}
- /* Skip this extra field block */
- ef_buf += (eb_len + EB_HEADSIZE);
- ef_len -= (eb_len + EB_HEADSIZE);
+ /* Advance to the next extra field block. */
+ ef_buf += (eb_len+ EB_HEADSIZE);
+ ef_len -= (eb_len+ EB_HEADSIZE);
}
return PK_COOL;
* to restore the original state when called with opt < 0 (as by,
* say, an exit handler, to avoid leaving the terminal in a noecho
* state if the user aborts (Ctrl/C) at a password prompt).
+ *
+ * 2014-12-26 SMS.
+ * Moved echo_orig from local static storage into the global
+ * structure.
*/
short DevChan;
short iosb[4];
int status;
unsigned int ttmode[2]; /* space for 8 bytes */
- static int echo_orig = -1; /* Original echo state. */
int ret_status = 0; /* Status value to return. */
- if ((opt < 0) && (echo_orig < 0))
+ GETGLOBALS();
+
+ if ((opt < 0) && (G.echo_orig < 0))
{
/* Final call, but no original echo state to restore.
* Return immediately with success status.
/* Final (restore) call. Replace (negative) opt value with the
* (known) orginal echo stste.
*/
- opt = echo_orig;
+ opt = G.echo_orig;
}
- else if (echo_orig < 0)
+ else if (G.echo_orig < 0)
{
/* On the first (non-restore) call, save the original echo state. */
- echo_orig = ((ttmode[ 1]& TT$M_NOECHO) ? 0 : 1);
+ G.echo_orig = ((ttmode[ 1]& TT$M_NOECHO) ? 0 : 1);
}
/* modify mode buffer to be either NOECHO or ECHO
#==============================================================================
# unix/Makefile
-# - For UnZip, fUnZip, UnZipSFX, and ZipInfo Revised: 2014-10-10
+# - For UnZip, fUnZip, UnZipSFX, and ZipInfo Revised: 2014-11-14
#
# Copyright (c) 2004-2014 Info-ZIP. All rights reserved.
#
"LIST='$(LIST)'" \
"CC='$(CC)'" \
"CFLAGS='$(LOCAL_UNZIP)'" \
- "LFLAGS1='$(LFLAGS1)'" \
- "LFLAGS2='$(LFLAGS2)'" \
+ "LF1='$(LF1)'" \
+ "LF2='$(LF2)'" \
"NO_AES_WG='$(NO_AES_WG)'" \
"IZ_BZIP2='$(IZ_BZIP2)'" \
"NO_IZ_BZIP2='$(NO_IZ_BZIP2)'" \
# endif
# ifdef BETA
-# define UZ_BETALEVEL "c12 BETA"
-# define UZ_VERSION_DATE "11 Nov 2014" /* Internal beta version. */
+# define UZ_BETALEVEL "c13 BETA"
+# define UZ_VERSION_DATE "26 Dec 2014" /* Internal beta version. */
# else
# define UZ_BETALEVEL ""
# define UZ_VERSION_DATE "?? ??? 2014" /* Official release version. */
#
# UnZip 6.10 for VMS -- MMS (or MMK) Source Description File.
#
-# Last revised: 2014-10-20
+# Last revised: 2014-11-22
#
#----------------------------------------------------------------------
# Copyright (c) 2004-2014 Info-ZIP. All rights reserved.
create /directory $(BZ2DIR_BIN)
.ELSE # BUILD_BZIP2
@ @[.VMS]FIND_BZIP2_LIB.COM $(IZ_BZIP2) $(SEEK_BZ) $(BZ2_OLB) lib_bzip2
- @ no_lib_bzip2 = (f$trnlnm( "lib_bzip2") .eqs. "")
- @ if (no_lib_bzip2) then -
+ @ no_lib_bzip2_dcl_sym = (f$trnlnm( "lib_bzip2") .eqs. "")
+ @ if (no_lib_bzip2_dcl_sym) then -
write sys$output " Can not find BZIP2 object library."
- @ if (no_lib_bzip2) then -
+ @ if (no_lib_bzip2_dcl_sym) then -
write sys$output ""
- @ if (no_lib_bzip2) then -
+ @ if (no_lib_bzip2_dcl_sym) then -
I_WILL_DIE_NOW. /$$$$INVALID$$$$
@ write sys$output " BZIP2 dir: ''f$trnlnm( "lib_bzip2")'"
.ENDIF # BUILD_BZIP2
.ENDIF # IZ_BZIP2
.IFDEF IZ_ZLIB # IZ_ZLIB
@ @[.VMS]FIND_BZIP2_LIB.COM $(IZ_ZLIB) $(SEEK_BZ) LIBZ.OLB lib_zlib
- @ no_lib_zlib = (f$trnlnm( "lib_zlib") .eqs. "")
- @ if (no_lib_zlib) then -
+ @ no_lib_zlib_dcl_sym = (f$trnlnm( "lib_zlib") .eqs. "")
+ @ if (no_lib_zlib_dcl_sym) then -
write sys$output " Can not find ZLIB object library."
- @ if (no_lib_zlib) then -
+ @ if (no_lib_zlib_dcl_sym) then -
write sys$output ""
- @ if (no_lib_zlib) then -
+ @ if (no_lib_zlib_dcl_sym) then -
I_WILL_DIE_NOW. /$$$$INVALID$$$$
@ write sys$output " ZLIB dir: ''f$trnlnm( "lib_zlib")'"
@ write sys$output ""
@ write sys$output ""
@ write sys$output " Verifying large-file support..."
@ @[.VMS]CHECK_LARGE.COM $(DEST) large_ok
- @ no_large = (f$trnlnm( "large_ok") .eqs. "")
- @ if (no_large) then -
+ @ no_large_dcl_sym = (f$trnlnm( "large_ok") .eqs. "")
+ @ if (no_large_dcl_sym) then -
write sys$output -
" Large-file support not available with this VMS/CRTL version."
- @ if (no_large) then -
+ @ if (no_large_dcl_sym) then -
write sys$output " Add ""/MACRO = NOLARGE=1""."
- @ if (no_large) then -
+ @ if (no_large_dcl_sym) then -
I_WILL_DIE_NOW. /$$$$INVALID$$$$
@ write sys$output " Large-file support ok."
@ write sys$output ""
--- /dev/null
+
+Info-Zip UnZip -- Source kit. Version 6.10c13 (BETA) 26 Dec 2014.
+
+See enclosed files INSTALL, LICENSE, and README. For information on
+Info-Zip UnZip and Zip:
+ http://www.info-zip.org/pub/infozip/
+ http://sourceforge.net/projects/infozip/
+Executables for some released versions may also be available:
+ ftp://ftp.info-zip.org/pub/infozip/
+