https://bugs.gentoo.org/269742 From bfae00d02b5fb3a2ce34c09d2dbf0ca2f96b154f Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 14 Mar 2009 17:57:41 +0000 Subject: [PATCH] support xz compression, http://tukaani.org/xz --- ChangeLog | 6 ++++++ NEWS | 4 ++++ doc/info-stnd.texi | 34 +++++++++++++++++----------------- info/filesys.c | 1 + install-info/install-info.c | 29 +++++++++++++++++++++++++---- 5 files changed, 53 insertions(+), 21 deletions(-) 2009-03-14 Karl Berry * info/filesys.c (compress_suffixes): add .xz/unxz. * info/filesys.h (DEFAULT_INFOPATH): include PATH by default. diff --git a/doc/info-stnd.texi b/doc/info-stnd.texi index 2bd67f3..c730cff 100644 --- a/doc/info-stnd.texi +++ b/doc/info-stnd.texi @@ -202,21 +202,21 @@ directory. @cindex Info files, compressed In every directory Info tries, if @var{filename} is not found, Info looks for it with a number of known extensions of Info files@footnote{ -@file{.info}, @file{-info}, @file{/index}, and @file{.inf}.}. For every -known extension, Info looks for a compressed file, if a regular file -isn't found. Info supports files compressed with @code{gzip}, -@code{bzip2}, @code{compress} and @code{yabba} programs; it calls -@code{gunzip}, @code{bunzip2}, @code{uncompress} and @code{unyabba}, -accordingly, to decompress such files. Compressed Info files are -assumed to have @file{.z}, @file{.gz}, @file{.bz2}, @file{.Z}, or -@file{.Y} extensions, possibly in addition to one of the known Info -files extensions@footnote{The MS-DOS version allows for the Info -extension, such as @code{.inf}, and the short compressed file -extensions, such as @file{.z} and @file{.gz}, to be merged into a single -extension, since DOS doesn't allow more than a single dot in the -basename of a file. Thus, on MS-DOS, if Info looks for @file{bison}, -file names like @file{bison.igz} and @file{bison.inz} will be found and -decompressed by @code{gunzip}.}. +@file{.info}, @file{-info}, @file{/index}, and @file{.inf}.}. For +every known extension, Info looks for a compressed file, if a regular +file isn't found. Info supports files compressed with @code{gzip}, +@code{xz}, @code{bzip2}, @code{lzma}, @code{compress} and @code{yabba} +programs, assumed to have @file{.z}, @file{.gz}, @file{.xz}, +@file{.bz2}, @file{.lzma}, @file{.Z}, or @file{.Y} extensions, +possibly after one of the known Info files extensions. + +On MS-DOS, Info allows for the Info extension, such as @code{.inf}, +and the short compressed file extensions, such as @file{.z} and +@file{.gz}, to be merged into a single extension, since DOS doesn't +allow more than a single dot in the basename of a file. Thus, on +MS-DOS, if Info looks for @file{bison}, file names like +@file{bison.igz} and @file{bison.inz} will be found and decompressed +by @code{gunzip}. @item --help @itemx -h diff --git a/info/filesys.c b/info/filesys.c index fdd18a8..5e795bc 100644 --- a/info/filesys.c +++ b/info/filesys.c @@ -55,6 +55,7 @@ static char *info_suffixes[] = { static COMPRESSION_ALIST compress_suffixes[] = { { ".gz", "gunzip" }, + { ".xz", "unxz" }, { ".bz2", "bunzip2" }, { ".z", "gunzip" }, { ".lzma", "unlzma" }, diff --git a/install-info/install-info.c b/install-info/install-info.c index 24669b3..0f18ca4 100644 --- a/install-info/install-info.c +++ b/install-info/install-info.c @@ -400,6 +400,11 @@ strip_info_suffix (char *fname) len -= 3; ret[len] = 0; } + else if (len > 3 && FILENAME_CMP (ret + len - 3, ".xz") == 0) + { + len -= 3; + ret[len] = 0; + } else if (len > 4 && FILENAME_CMP (ret + len - 4, ".bz2") == 0) { len -= 4; @@ -659,6 +664,12 @@ open_possibly_compressed_file (char *filename, { *opened_filename = concat (filename, ".gz", ""); f = fopen (*opened_filename, FOPEN_RBIN); + } + if (!f) + { + *opened_filename = concat (filename, ".xz", ""); + f = fopen (*opened_filename, FOPEN_RBIN); + } if (!f) { free (*opened_filename); @@ -702,7 +712,6 @@ open_possibly_compressed_file (char *filename, else pfatal_with_name (filename); } - } /* Read first few bytes of file rather than relying on the filename. If the file is shorter than this it can't be usable anyway. */ @@ -727,6 +736,15 @@ open_possibly_compressed_file (char *filename, #else *compression_program = "gzip"; #endif + + else if (data[0] == '\xFD' && data[1] == '7' && data[2] == 'z' + && data[3] == 'X' && data[4] == 'Z' && data[5] == 0) +#ifndef STRIP_DOT_EXE + *compression_program = "xz.exe"; +#else + *compression_program = "xz"; +#endif + else if (data[0] == 'B' && data[1] == 'Z' && data[2] == 'h') #ifndef STRIP_DOT_EXE *compression_program = "bzip2.exe"; -- 1.7.4.rc2