]> granicus.if.org Git - postgresql/commitdiff
Fix build on zlib-less environments
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 3 Aug 2017 18:48:54 +0000 (14:48 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 3 Aug 2017 18:55:17 +0000 (14:55 -0400)
Commit 4d57e8381677 added support for getting I/O errors out of zlib,
but it introduced a portability problem for systems without zlib.
Repair by wrapping the zlib call inside #ifdef and restore the original
code in the other branch.

This serves to illustrate the inadequacy of the zlib abstraction in
pg_backup_archiver: there is no way to call gzerror() in that
abstraction.  This means that the several places that call GZREAD and
GZWRITE are currently doing error reporting wrongly, but ENOTIME to get
it fixed before next week's release set.

Backpatch to 9.4, like the commit that introduced the problem.

src/bin/pg_dump/pg_backup_tar.c

index 905429b9ef28476148fcdd07ca90865a0be8d6dd..921918e382982ee6f52df33b00ec64783f73de9c 100644 (file)
@@ -557,12 +557,18 @@ _tarReadRaw(ArchiveHandle *AH, void *buf, size_t len, TAR_MEMBER *th, FILE *fh)
                                res = GZREAD(&((char *) buf)[used], 1, len, th->zFH);
                                if (res != len && !GZEOF(th->zFH))
                                {
+#ifdef HAVE_LIBZ
                                        int             errnum;
                                        const char *errmsg = gzerror(th->zFH, &errnum);
 
                                        exit_horribly(modulename,
                                                                  "could not read from input file: %s\n",
                                                                  errnum == Z_ERRNO ? strerror(errno) : errmsg);
+#else
+                                       exit_horribly(modulename,
+                                                                 "could not read from input file: %s\n",
+                                                                 strerror(errno));
+#endif
                                }
                        }
                        else