LCOV - code coverage report
Current view: top level - src/bin/pg_dump - compress_none.c (source / functions) Hit Total Coverage
Test: PostgreSQL 18devel Lines: 50 78 64.1 %
Date: 2024-11-21 08:14:44 Functions: 9 14 64.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*-------------------------------------------------------------------------
       2             :  *
       3             :  * compress_none.c
       4             :  *   Routines for archivers to read or write an uncompressed stream.
       5             :  *
       6             :  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
       7             :  * Portions Copyright (c) 1994, Regents of the University of California
       8             :  *
       9             :  * IDENTIFICATION
      10             :  *     src/bin/pg_dump/compress_none.c
      11             :  *
      12             :  *-------------------------------------------------------------------------
      13             :  */
      14             : #include "postgres_fe.h"
      15             : #include <unistd.h>
      16             : 
      17             : #include "compress_none.h"
      18             : #include "pg_backup_utils.h"
      19             : 
      20             : /*----------------------
      21             :  * Compressor API
      22             :  *----------------------
      23             :  */
      24             : 
      25             : /*
      26             :  * Private routines
      27             :  */
      28             : 
      29             : static void
      30           0 : ReadDataFromArchiveNone(ArchiveHandle *AH, CompressorState *cs)
      31             : {
      32             :     size_t      cnt;
      33             :     char       *buf;
      34             :     size_t      buflen;
      35             : 
      36           0 :     buflen = DEFAULT_IO_BUFFER_SIZE;
      37           0 :     buf = pg_malloc(buflen);
      38             : 
      39           0 :     while ((cnt = cs->readF(AH, &buf, &buflen)))
      40             :     {
      41           0 :         ahwrite(buf, 1, cnt, AH);
      42             :     }
      43             : 
      44           0 :     free(buf);
      45           0 : }
      46             : 
      47             : 
      48             : static void
      49           0 : WriteDataToArchiveNone(ArchiveHandle *AH, CompressorState *cs,
      50             :                        const void *data, size_t dLen)
      51             : {
      52           0 :     cs->writeF(AH, data, dLen);
      53           0 : }
      54             : 
      55             : static void
      56           0 : EndCompressorNone(ArchiveHandle *AH, CompressorState *cs)
      57             : {
      58             :     /* no op */
      59           0 : }
      60             : 
      61             : /*
      62             :  * Public interface
      63             :  */
      64             : 
      65             : void
      66           0 : InitCompressorNone(CompressorState *cs,
      67             :                    const pg_compress_specification compression_spec)
      68             : {
      69           0 :     cs->readData = ReadDataFromArchiveNone;
      70           0 :     cs->writeData = WriteDataToArchiveNone;
      71           0 :     cs->end = EndCompressorNone;
      72             : 
      73           0 :     cs->compression_spec = compression_spec;
      74           0 : }
      75             : 
      76             : 
      77             : /*----------------------
      78             :  * Compress File API
      79             :  *----------------------
      80             :  */
      81             : 
      82             : /*
      83             :  * Private routines
      84             :  */
      85             : 
      86             : static bool
      87       36220 : read_none(void *ptr, size_t size, size_t *rsize, CompressFileHandle *CFH)
      88             : {
      89       36220 :     FILE       *fp = (FILE *) CFH->private_data;
      90             :     size_t      ret;
      91             : 
      92       36220 :     if (size == 0)
      93        3626 :         return true;
      94             : 
      95       32594 :     ret = fread(ptr, 1, size, fp);
      96       32594 :     if (ret != size && !feof(fp))
      97           0 :         pg_fatal("could not read from input file: %m");
      98             : 
      99       32594 :     if (rsize)
     100           0 :         *rsize = ret;
     101             : 
     102       32594 :     return true;
     103             : }
     104             : 
     105             : static bool
     106     4247732 : write_none(const void *ptr, size_t size, CompressFileHandle *CFH)
     107             : {
     108             :     size_t      ret;
     109             : 
     110     4247732 :     ret = fwrite(ptr, 1, size, (FILE *) CFH->private_data);
     111     4247732 :     if (ret != size)
     112           0 :         return false;
     113             : 
     114     4247732 :     return true;
     115             : }
     116             : 
     117             : static const char *
     118           0 : get_error_none(CompressFileHandle *CFH)
     119             : {
     120           0 :     return strerror(errno);
     121             : }
     122             : 
     123             : static char *
     124          24 : gets_none(char *ptr, int size, CompressFileHandle *CFH)
     125             : {
     126          24 :     return fgets(ptr, size, (FILE *) CFH->private_data);
     127             : }
     128             : 
     129             : static int
     130      316468 : getc_none(CompressFileHandle *CFH)
     131             : {
     132      316468 :     FILE       *fp = (FILE *) CFH->private_data;
     133             :     int         ret;
     134             : 
     135      316468 :     ret = fgetc(fp);
     136      316468 :     if (ret == EOF)
     137             :     {
     138           0 :         if (!feof(fp))
     139           0 :             pg_fatal("could not read from input file: %m");
     140             :         else
     141           0 :             pg_fatal("could not read from input file: end of file");
     142             :     }
     143             : 
     144      316468 :     return ret;
     145             : }
     146             : 
     147             : static bool
     148         718 : close_none(CompressFileHandle *CFH)
     149             : {
     150         718 :     FILE       *fp = (FILE *) CFH->private_data;
     151         718 :     int         ret = 0;
     152             : 
     153         718 :     CFH->private_data = NULL;
     154             : 
     155         718 :     if (fp)
     156         718 :         ret = fclose(fp);
     157             : 
     158         718 :     return ret == 0;
     159             : }
     160             : 
     161             : static bool
     162          12 : eof_none(CompressFileHandle *CFH)
     163             : {
     164          12 :     return feof((FILE *) CFH->private_data) != 0;
     165             : }
     166             : 
     167             : static bool
     168         724 : open_none(const char *path, int fd, const char *mode, CompressFileHandle *CFH)
     169             : {
     170             :     Assert(CFH->private_data == NULL);
     171             : 
     172         724 :     if (fd >= 0)
     173         424 :         CFH->private_data = fdopen(dup(fd), mode);
     174             :     else
     175         300 :         CFH->private_data = fopen(path, mode);
     176             : 
     177         724 :     if (CFH->private_data == NULL)
     178           0 :         return false;
     179             : 
     180         724 :     return true;
     181             : }
     182             : 
     183             : static bool
     184          36 : open_write_none(const char *path, const char *mode, CompressFileHandle *CFH)
     185             : {
     186             :     Assert(CFH->private_data == NULL);
     187             : 
     188          36 :     CFH->private_data = fopen(path, mode);
     189          36 :     if (CFH->private_data == NULL)
     190           0 :         return false;
     191             : 
     192          36 :     return true;
     193             : }
     194             : 
     195             : /*
     196             :  * Public interface
     197             :  */
     198             : 
     199             : void
     200         760 : InitCompressFileHandleNone(CompressFileHandle *CFH,
     201             :                            const pg_compress_specification compression_spec)
     202             : {
     203         760 :     CFH->open_func = open_none;
     204         760 :     CFH->open_write_func = open_write_none;
     205         760 :     CFH->read_func = read_none;
     206         760 :     CFH->write_func = write_none;
     207         760 :     CFH->gets_func = gets_none;
     208         760 :     CFH->getc_func = getc_none;
     209         760 :     CFH->close_func = close_none;
     210         760 :     CFH->eof_func = eof_none;
     211         760 :     CFH->get_error_func = get_error_none;
     212             : 
     213         760 :     CFH->private_data = NULL;
     214         760 : }

Generated by: LCOV version 1.14