#include "compress_io.h"#include "pg_backup_utils.h"#include "parallel.h"
Go to the source code of this file.
Data Structures | |
| struct | CompressorState |
| struct | cfp |
Functions | |
| static void | ParseCompressionOption (int compression, CompressionAlgorithm *alg, int *level) |
| static void | ReadDataFromArchiveNone (ArchiveHandle *AH, ReadFunc readF) |
| static size_t | WriteDataToArchiveNone (ArchiveHandle *AH, CompressorState *cs, const char *data, size_t dLen) |
| CompressorState * | AllocateCompressor (int compression, WriteFunc writeF) |
| void | ReadDataFromArchive (ArchiveHandle *AH, int compression, ReadFunc readF) |
| size_t | WriteDataToArchive (ArchiveHandle *AH, CompressorState *cs, const void *data, size_t dLen) |
| void | EndCompressor (ArchiveHandle *AH, CompressorState *cs) |
| cfp * | cfopen_read (const char *path, const char *mode) |
| cfp * | cfopen_write (const char *path, const char *mode, int compression) |
| cfp * | cfopen (const char *path, const char *mode, int compression) |
| int | cfread (void *ptr, int size, cfp *fp) |
| int | cfwrite (const void *ptr, int size, cfp *fp) |
| int | cfgetc (cfp *fp) |
| char * | cfgets (cfp *fp, char *buf, int len) |
| int | cfclose (cfp *fp) |
| int | cfeof (cfp *fp) |
Variables | |
| static const char * | modulename = gettext_noop("compress_io") |
| CompressorState* AllocateCompressor | ( | int | compression, | |
| WriteFunc | writeF | |||
| ) |
Definition at line 128 of file compress_io.c.
References COMPR_ALG_LIBZ, CompressorState::comprAlg, exit_horribly(), modulename, ParseCompressionOption(), pg_malloc0(), and CompressorState::writeF.
Referenced by _StartBlob(), and _StartData().
{
CompressorState *cs;
CompressionAlgorithm alg;
int level;
ParseCompressionOption(compression, &alg, &level);
#ifndef HAVE_LIBZ
if (alg == COMPR_ALG_LIBZ)
exit_horribly(modulename, "not built with zlib support\n");
#endif
cs = (CompressorState *) pg_malloc0(sizeof(CompressorState));
cs->writeF = writeF;
cs->comprAlg = alg;
/*
* Perform compression algorithm specific initialization.
*/
#ifdef HAVE_LIBZ
if (alg == COMPR_ALG_LIBZ)
InitCompressorZlib(cs, level);
#endif
return cs;
}
| int cfclose | ( | cfp * | fp | ) |
Definition at line 620 of file compress_io.c.
References free, NULL, and cfp::uncompressedfp.
Referenced by _CloseArchive(), _EndBlob(), _EndBlobs(), _EndData(), _LoadBlobs(), _PrintFileData(), and InitArchiveFmt_Directory().
{
int result;
if (fp == NULL)
{
errno = EBADF;
return EOF;
}
#ifdef HAVE_LIBZ
if (fp->compressedfp)
{
result = gzclose(fp->compressedfp);
fp->compressedfp = NULL;
}
else
#endif
{
result = fclose(fp->uncompressedfp);
fp->uncompressedfp = NULL;
}
free(fp);
return result;
}
| int cfeof | ( | cfp * | fp | ) |
Definition at line 647 of file compress_io.c.
References cfp::uncompressedfp.
Referenced by _LoadBlobs().
{
#ifdef HAVE_LIBZ
if (fp->compressedfp)
return gzeof(fp->compressedfp);
else
#endif
return feof(fp->uncompressedfp);
}
| int cfgetc | ( | cfp * | fp | ) |
Definition at line 598 of file compress_io.c.
References cfp::uncompressedfp.
Referenced by _ReadByte().
{
#ifdef HAVE_LIBZ
if (fp->compressedfp)
return gzgetc(fp->compressedfp);
else
#endif
return fgetc(fp->uncompressedfp);
}
| char* cfgets | ( | cfp * | fp, | |
| char * | buf, | |||
| int | len | |||
| ) |
Definition at line 609 of file compress_io.c.
References cfp::uncompressedfp.
Referenced by _LoadBlobs().
{
#ifdef HAVE_LIBZ
if (fp->compressedfp)
return gzgets(fp->compressedfp, buf, len);
else
#endif
return fgets(buf, len, fp->uncompressedfp);
}
| cfp* cfopen | ( | const char * | path, | |
| const char * | mode, | |||
| int | compression | |||
| ) |
Definition at line 540 of file compress_io.c.
References exit_horribly(), free, modulename, NULL, pg_malloc(), and cfp::uncompressedfp.
Referenced by cfopen_read(), and cfopen_write().
{
cfp *fp = pg_malloc(sizeof(cfp));
if (compression != 0)
{
#ifdef HAVE_LIBZ
fp->compressedfp = gzopen(path, mode);
fp->uncompressedfp = NULL;
if (fp->compressedfp == NULL)
{
free(fp);
fp = NULL;
}
#else
exit_horribly(modulename, "not built with zlib support\n");
#endif
}
else
{
#ifdef HAVE_LIBZ
fp->compressedfp = NULL;
#endif
fp->uncompressedfp = fopen(path, mode);
if (fp->uncompressedfp == NULL)
{
free(fp);
fp = NULL;
}
}
return fp;
}
| cfp* cfopen_read | ( | const char * | path, | |
| const char * | mode | |||
| ) |
Definition at line 476 of file compress_io.c.
References cfopen(), free, NULL, pg_malloc(), and snprintf().
Referenced by _LoadBlobs(), _PrintFileData(), and InitArchiveFmt_Directory().
{
cfp *fp;
#ifdef HAVE_LIBZ
if (hasSuffix(path, ".gz"))
fp = cfopen(path, mode, 1);
else
#endif
{
fp = cfopen(path, mode, 0);
#ifdef HAVE_LIBZ
if (fp == NULL)
{
int fnamelen = strlen(path) + 4;
char *fname = pg_malloc(fnamelen);
snprintf(fname, fnamelen, "%s%s", path, ".gz");
fp = cfopen(fname, mode, 1);
free(fname);
}
#endif
}
return fp;
}
| cfp* cfopen_write | ( | const char * | path, | |
| const char * | mode, | |||
| int | compression | |||
| ) |
Definition at line 512 of file compress_io.c.
References cfopen(), exit_horribly(), free, modulename, pg_malloc(), and snprintf().
Referenced by _CloseArchive(), _StartBlob(), _StartBlobs(), and _StartData().
{
cfp *fp;
if (compression == 0)
fp = cfopen(path, mode, 0);
else
{
#ifdef HAVE_LIBZ
int fnamelen = strlen(path) + 4;
char *fname = pg_malloc(fnamelen);
snprintf(fname, fnamelen, "%s%s", path, ".gz");
fp = cfopen(fname, mode, 1);
free(fname);
#else
exit_horribly(modulename, "not built with zlib support\n");
fp = NULL; /* keep compiler quiet */
#endif
}
return fp;
}
| int cfread | ( | void * | ptr, | |
| int | size, | |||
| cfp * | fp | |||
| ) |
Definition at line 576 of file compress_io.c.
References cfp::uncompressedfp.
Referenced by _PrintFileData(), and _ReadBuf().
{
#ifdef HAVE_LIBZ
if (fp->compressedfp)
return gzread(fp->compressedfp, ptr, size);
else
#endif
return fread(ptr, 1, size, fp->uncompressedfp);
}
| int cfwrite | ( | const void * | ptr, | |
| int | size, | |||
| cfp * | fp | |||
| ) |
Definition at line 587 of file compress_io.c.
References cfp::uncompressedfp.
Referenced by _EndBlob(), _WriteBuf(), _WriteByte(), and _WriteData().
{
#ifdef HAVE_LIBZ
if (fp->compressedfp)
return gzwrite(fp->compressedfp, ptr, size);
else
#endif
return fwrite(ptr, 1, size, fp->uncompressedfp);
}
| void EndCompressor | ( | ArchiveHandle * | AH, | |
| CompressorState * | cs | |||
| ) |
Definition at line 207 of file compress_io.c.
References COMPR_ALG_LIBZ, CompressorState::comprAlg, and free.
Referenced by _EndBlob(), and _EndData().
{
#ifdef HAVE_LIBZ
if (cs->comprAlg == COMPR_ALG_LIBZ)
EndCompressorZlib(AH, cs);
#endif
free(cs);
}
| static void ParseCompressionOption | ( | int | compression, | |
| CompressionAlgorithm * | alg, | |||
| int * | level | |||
| ) | [static] |
Definition at line 105 of file compress_io.c.
References exit_horribly(), modulename, and Z_DEFAULT_COMPRESSION.
Referenced by AllocateCompressor(), and ReadDataFromArchive().
{
if (compression == Z_DEFAULT_COMPRESSION ||
(compression > 0 && compression <= 9))
*alg = COMPR_ALG_LIBZ;
else if (compression == 0)
*alg = COMPR_ALG_NONE;
else
{
exit_horribly(modulename, "invalid compression code: %d\n",
compression);
*alg = COMPR_ALG_NONE; /* keep compiler quiet */
}
/* The level is just the passed-in value. */
if (level)
*level = compression;
}
| void ReadDataFromArchive | ( | ArchiveHandle * | AH, | |
| int | compression, | |||
| ReadFunc | readF | |||
| ) |
Definition at line 161 of file compress_io.c.
References COMPR_ALG_LIBZ, COMPR_ALG_NONE, exit_horribly(), modulename, NULL, ParseCompressionOption(), and ReadDataFromArchiveNone().
Referenced by _PrintData().
{
CompressionAlgorithm alg;
ParseCompressionOption(compression, &alg, NULL);
if (alg == COMPR_ALG_NONE)
ReadDataFromArchiveNone(AH, readF);
if (alg == COMPR_ALG_LIBZ)
{
#ifdef HAVE_LIBZ
ReadDataFromArchiveZlib(AH, readF);
#else
exit_horribly(modulename, "not built with zlib support\n");
#endif
}
}
| static void ReadDataFromArchiveNone | ( | ArchiveHandle * | AH, | |
| ReadFunc | readF | |||
| ) | [static] |
Definition at line 410 of file compress_io.c.
References ahwrite(), checkAborting(), free, pg_malloc(), and ZLIB_OUT_SIZE.
Referenced by ReadDataFromArchive().
{
size_t cnt;
char *buf;
size_t buflen;
buf = pg_malloc(ZLIB_OUT_SIZE);
buflen = ZLIB_OUT_SIZE;
while ((cnt = readF(AH, &buf, &buflen)))
{
/* Are we aborting? */
checkAborting(AH);
ahwrite(buf, 1, cnt, AH);
}
free(buf);
}
| size_t WriteDataToArchive | ( | ArchiveHandle * | AH, | |
| CompressorState * | cs, | |||
| const void * | data, | |||
| size_t | dLen | |||
| ) |
Definition at line 183 of file compress_io.c.
References checkAborting(), COMPR_ALG_LIBZ, COMPR_ALG_NONE, CompressorState::comprAlg, exit_horribly(), modulename, and WriteDataToArchiveNone().
Referenced by _WriteData().
{
/* Are we aborting? */
checkAborting(AH);
switch (cs->comprAlg)
{
case COMPR_ALG_LIBZ:
#ifdef HAVE_LIBZ
return WriteDataToArchiveZlib(AH, cs, data, dLen);
#else
exit_horribly(modulename, "not built with zlib support\n");
#endif
case COMPR_ALG_NONE:
return WriteDataToArchiveNone(AH, cs, data, dLen);
}
return 0; /* keep compiler quiet */
}
| static size_t WriteDataToArchiveNone | ( | ArchiveHandle * | AH, | |
| CompressorState * | cs, | |||
| const char * | data, | |||
| size_t | dLen | |||
| ) | [static] |
Definition at line 431 of file compress_io.c.
References exit_horribly(), modulename, strerror(), and CompressorState::writeF.
Referenced by WriteDataToArchive().
{
/*
* Any write function should do its own error checking but to make sure we
* do a check here as well...
*/
if (cs->writeF(AH, data, dLen) != dLen)
exit_horribly(modulename,
"could not write to output file: %s\n",
strerror(errno));
return dLen;
}
const char* modulename = gettext_noop("compress_io") [static] |
Definition at line 78 of file compress_io.c.
Referenced by AllocateCompressor(), cfopen(), cfopen_write(), ParseCompressionOption(), pgwin32_putenv(), ReadDataFromArchive(), WriteDataToArchive(), and WriteDataToArchiveNone().
1.7.1