From e34f792ab841ff07623bbb2ff5685c671fa4bc50 Mon Sep 17 00:00:00 2001 From: Miloslav Trmac Date: Mon, 16 Jan 2006 05:17:26 +0000 Subject: [PATCH] - Fix handling of bzip2'ed files (#128637) --- texinfo-4.8-zlib.patch | 160 +++++++++++++++++++++++++++++++++++++++++ texinfo.spec | 7 +- 2 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 texinfo-4.8-zlib.patch diff --git a/texinfo-4.8-zlib.patch b/texinfo-4.8-zlib.patch new file mode 100644 index 0000000..8504ce1 --- /dev/null +++ b/texinfo-4.8-zlib.patch @@ -0,0 +1,160 @@ +--- texinfo-4.8/util/Makefile.in.zlib 2006-01-16 05:53:28.000000000 +0100 ++++ texinfo-4.8/util/Makefile.in 2006-01-16 05:53:45.000000000 +0100 +@@ -83,7 +83,7 @@ + PROGRAMS = $(bin_PROGRAMS) + am_ginstall_info_OBJECTS = install-info.$(OBJEXT) + ginstall_info_OBJECTS = $(am_ginstall_info_OBJECTS) +-ginstall_info_LDADD = $(LDADD) ++ginstall_info_LDADD = $(LDADD) -lz + am__DEPENDENCIES_1 = + ginstall_info_DEPENDENCIES = ../lib/libtxi.a $(am__DEPENDENCIES_1) + texindex_SOURCES = texindex.c +--- texinfo-4.8/util/install-info.c.zlib 2006-01-16 05:55:00.000000000 +0100 ++++ texinfo-4.8/util/install-info.c 2006-01-16 06:03:40.000000000 +0100 +@@ -20,6 +20,7 @@ + + #include "system.h" + #include ++#include + + static char *progname = "install-info"; + +@@ -529,7 +530,7 @@ + COMPRESSION_PROGRAM. The compression program is determined by the + magic number, not the filename. */ + +-FILE * ++void * + open_possibly_compressed_file (char *filename, + void (*create_callback) (char *), + char **opened_filename, char **compression_program, int *is_pipe) +@@ -537,7 +538,7 @@ + char *local_opened_filename, *local_compression_program; + int nread; + char data[4]; +- FILE *f; ++ gzFile *f; + + /* We let them pass NULL if they don't want this info, but it's easier + to always determine it. */ +@@ -545,16 +546,16 @@ + opened_filename = &local_opened_filename; + + *opened_filename = filename; +- f = fopen (*opened_filename, FOPEN_RBIN); ++ f = gzopen (*opened_filename, FOPEN_RBIN); + if (!f) + { + *opened_filename = concat (filename, ".gz", ""); +- f = fopen (*opened_filename, FOPEN_RBIN); ++ f = gzopen (*opened_filename, FOPEN_RBIN); + if (!f) + { + free (*opened_filename); + *opened_filename = concat (filename, ".bz2", ""); +- f = fopen (*opened_filename, FOPEN_RBIN); ++ f = gzopen (*opened_filename, FOPEN_RBIN); + } + + #ifdef __MSDOS__ +@@ -562,13 +563,13 @@ + { + free (*opened_filename); + *opened_filename = concat (filename, ".igz", ""); +- f = fopen (*opened_filename, FOPEN_RBIN); ++ f = gzopen (*opened_filename, FOPEN_RBIN); + } + if (!f) + { + free (*opened_filename); + *opened_filename = concat (filename, ".inz", ""); +- f = fopen (*opened_filename, FOPEN_RBIN); ++ f = gzopen (*opened_filename, FOPEN_RBIN); + } + #endif + if (!f) +@@ -580,7 +581,7 @@ + /* And try opening it again. */ + free (*opened_filename); + *opened_filename = filename; +- f = fopen (*opened_filename, FOPEN_RBIN); ++ f = gzopen (*opened_filename, FOPEN_RBIN); + if (!f) + pfatal_with_name (filename); + } +@@ -591,12 +592,12 @@ + + /* 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. */ +- nread = fread (data, sizeof (data), 1, f); +- if (nread != 1) ++ nread = gzread (f, data, sizeof (data)); ++ if (nread != sizeof (data)) + { + /* Empty files don't set errno, so we get something like + "install-info: No error for foo", which is confusing. */ +- if (nread == 0) ++ if (nread >= 0) + fatal (_("%s: empty file"), *opened_filename, 0); + pfatal_with_name (*opened_filename); + } +@@ -629,20 +630,22 @@ + + if (*compression_program) + { /* It's compressed, so fclose the file and then open a pipe. */ ++ FILE *p; + char *command = concat (*compression_program," -cd <", *opened_filename); +- if (fclose (f) < 0) ++ if (gzclose (f) < 0) + pfatal_with_name (*opened_filename); +- f = popen (command, "r"); +- if (f) ++ p = popen (command, "r"); ++ if (p) + *is_pipe = 1; + else + pfatal_with_name (command); ++ return p; + } + else + { /* It's a plain file, seek back over the magic bytes. */ +- if (fseek (f, 0, 0) < 0) ++ if (gzseek (f, 0, SEEK_SET) < 0) + pfatal_with_name (*opened_filename); +-#if O_BINARY ++#if 0 && O_BINARY + /* Since this is a text file, and we opened it in binary mode, + switch back to text mode. */ + f = freopen (*opened_filename, "r", f); +@@ -667,7 +670,7 @@ + char **compression_program) + { + char *real_name; +- FILE *f; ++ void *f; + int pipe_p; + int filled = 0; + int data_size = 8192; +@@ -681,7 +684,12 @@ + + for (;;) + { +- int nread = fread (data + filled, 1, data_size - filled, f); ++ int nread; ++ ++ if (pipe_p) ++ nread = fread (data + filled, 1, data_size - filled, f); ++ else ++ nread = gzread (f, data + filled, data_size - filled); + if (nread < 0) + pfatal_with_name (real_name); + if (nread == 0) +@@ -703,7 +711,7 @@ + if (pipe_p) + pclose (f); + else +- fclose (f); ++ gzclose (f); + + *sizep = filled; + return data; diff --git a/texinfo.spec b/texinfo.spec index d238e2c..3df1c4f 100644 --- a/texinfo.spec +++ b/texinfo.spec @@ -1,14 +1,14 @@ Summary: Tools needed to create Texinfo format documentation files. Name: texinfo Version: 4.8 -Release: 8 +Release: 9 License: GPL Group: Applications/Publishing Url: http://www.gnu.org/software/texinfo/ Source0: ftp://ftp.gnu.org/gnu/texinfo/texinfo-%{version}.tar.bz2 Source1: info-dir Source2: texi2pdf.man -Patch1: texinfo-4.3-zlib.patch +Patch1: texinfo-4.8-zlib.patch Patch2: texinfo-CAN-2005-3011.patch Prereq: /sbin/install-info Prefix: %{_prefix} @@ -123,6 +123,9 @@ fi %{_mandir}/man5/info.5* %changelog +* Mon Jan 16 2006 Miloslav Trmac - 4.8-9 +- Fix handling of bzip2'ed files (#128637) + * Mon Jan 16 2006 Miloslav Trmac - 4.8-8 - Ignore scriptlet failures with --excludedocs (#166958) - Don't link texindex to zlib, don't pretend to link to zlib statically