Fix oversights in pg_basebackup's -z (compression) option.

The short-form -z switch didn't work, for lack of telling getopt_long
about it; and even if specified long-form, it failed to do anything,
because the various tests elsewhere in the file would take
Z_DEFAULT_COMPRESSION (which is -1) as meaning "don't compress".

Per bug #6060 from Shigehiro Honda, though I editorialized on his patch
a bit.
This commit is contained in:
Tom Lane 2011-06-15 13:15:05 -04:00
parent 264a6b127a
commit 31156ce8b9
1 changed files with 7 additions and 7 deletions

View File

@ -264,7 +264,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
if (strcmp(basedir, "-") == 0) if (strcmp(basedir, "-") == 0)
{ {
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
if (compresslevel > 0) if (compresslevel != 0)
{ {
ztarfile = gzdopen(dup(fileno(stdout)), "wb"); ztarfile = gzdopen(dup(fileno(stdout)), "wb");
if (gzsetparams(ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK) if (gzsetparams(ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK)
@ -281,7 +281,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
else else
{ {
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
if (compresslevel > 0) if (compresslevel != 0)
{ {
snprintf(fn, sizeof(fn), "%s/base.tar.gz", basedir); snprintf(fn, sizeof(fn), "%s/base.tar.gz", basedir);
ztarfile = gzopen(fn, "wb"); ztarfile = gzopen(fn, "wb");
@ -305,7 +305,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
* Specific tablespace * Specific tablespace
*/ */
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
if (compresslevel > 0) if (compresslevel != 0)
{ {
snprintf(fn, sizeof(fn), "%s/%s.tar.gz", basedir, PQgetvalue(res, rownum, 0)); snprintf(fn, sizeof(fn), "%s/%s.tar.gz", basedir, PQgetvalue(res, rownum, 0));
ztarfile = gzopen(fn, "wb"); ztarfile = gzopen(fn, "wb");
@ -325,7 +325,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum)
} }
#ifdef HAVE_LIBZ #ifdef HAVE_LIBZ
if (compresslevel > 0) if (compresslevel != 0)
{ {
if (!ztarfile) if (!ztarfile)
{ {
@ -976,7 +976,7 @@ main(int argc, char **argv)
} }
} }
while ((c = getopt_long(argc, argv, "D:F:l:Z:c:h:p:U:xwWvP", while ((c = getopt_long(argc, argv, "D:F:xl:zZ:c:h:p:U:wWvP",
long_options, &option_index)) != -1) long_options, &option_index)) != -1)
{ {
switch (c) switch (c)
@ -1089,7 +1089,7 @@ main(int argc, char **argv)
/* /*
* Mutually exclusive arguments * Mutually exclusive arguments
*/ */
if (format == 'p' && compresslevel > 0) if (format == 'p' && compresslevel != 0)
{ {
fprintf(stderr, fprintf(stderr,
_("%s: only tar mode backups can be compressed\n"), _("%s: only tar mode backups can be compressed\n"),
@ -1100,7 +1100,7 @@ main(int argc, char **argv)
} }
#ifndef HAVE_LIBZ #ifndef HAVE_LIBZ
if (compresslevel > 0) if (compresslevel != 0)
{ {
fprintf(stderr, fprintf(stderr,
_("%s: this build does not support compression\n"), _("%s: this build does not support compression\n"),