PostgreSQL Source Code git master
compress_none.c
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * compress_none.c
4 * Routines for archivers to read or write an uncompressed stream.
5 *
6 * Portions Copyright (c) 1996-2025, 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
29static void
31{
32 size_t cnt;
33 char *buf;
34 size_t buflen;
35
37 buf = pg_malloc(buflen);
38
39 while ((cnt = cs->readF(AH, &buf, &buflen)))
40 {
41 ahwrite(buf, 1, cnt, AH);
42 }
43
44 free(buf);
45}
46
47
48static void
50 const void *data, size_t dLen)
51{
52 cs->writeF(AH, data, dLen);
53}
54
55static void
57{
58 /* no op */
59}
60
61/*
62 * Public interface
63 */
64
65void
67 const pg_compress_specification compression_spec)
68{
72
73 cs->compression_spec = compression_spec;
74}
75
76
77/*----------------------
78 * Compress File API
79 *----------------------
80 */
81
82/*
83 * Private routines
84 */
85
86static bool
87read_none(void *ptr, size_t size, size_t *rsize, CompressFileHandle *CFH)
88{
89 FILE *fp = (FILE *) CFH->private_data;
90 size_t ret;
91
92 if (size == 0)
93 return true;
94
95 ret = fread(ptr, 1, size, fp);
96 if (ret != size && !feof(fp))
97 pg_fatal("could not read from input file: %m");
98
99 if (rsize)
100 *rsize = ret;
101
102 return true;
103}
104
105static bool
106write_none(const void *ptr, size_t size, CompressFileHandle *CFH)
107{
108 size_t ret;
109
110 ret = fwrite(ptr, 1, size, (FILE *) CFH->private_data);
111 if (ret != size)
112 return false;
113
114 return true;
115}
116
117static const char *
119{
120 return strerror(errno);
121}
122
123static char *
124gets_none(char *ptr, int size, CompressFileHandle *CFH)
125{
126 return fgets(ptr, size, (FILE *) CFH->private_data);
127}
128
129static int
131{
132 FILE *fp = (FILE *) CFH->private_data;
133 int ret;
134
135 ret = fgetc(fp);
136 if (ret == EOF)
137 {
138 if (!feof(fp))
139 pg_fatal("could not read from input file: %m");
140 else
141 pg_fatal("could not read from input file: end of file");
142 }
143
144 return ret;
145}
146
147static bool
149{
150 FILE *fp = (FILE *) CFH->private_data;
151 int ret = 0;
152
153 CFH->private_data = NULL;
154
155 if (fp)
156 ret = fclose(fp);
157
158 return ret == 0;
159}
160
161static bool
163{
164 return feof((FILE *) CFH->private_data) != 0;
165}
166
167static bool
168open_none(const char *path, int fd, const char *mode, CompressFileHandle *CFH)
169{
170 Assert(CFH->private_data == NULL);
171
172 if (fd >= 0)
173 CFH->private_data = fdopen(dup(fd), mode);
174 else
175 CFH->private_data = fopen(path, mode);
176
177 if (CFH->private_data == NULL)
178 return false;
179
180 return true;
181}
182
183static bool
184open_write_none(const char *path, const char *mode, CompressFileHandle *CFH)
185{
186 Assert(CFH->private_data == NULL);
187
188 CFH->private_data = fopen(path, mode);
189 if (CFH->private_data == NULL)
190 return false;
191
192 return true;
193}
194
195/*
196 * Public interface
197 */
198
199void
201 const pg_compress_specification compression_spec)
202{
203 CFH->open_func = open_none;
205 CFH->read_func = read_none;
206 CFH->write_func = write_none;
207 CFH->gets_func = gets_none;
208 CFH->getc_func = getc_none;
209 CFH->close_func = close_none;
210 CFH->eof_func = eof_none;
212
213 CFH->private_data = NULL;
214}
#define Assert(condition)
Definition: c.h:815
#define DEFAULT_IO_BUFFER_SIZE
Definition: compress_io.h:27
static bool close_none(CompressFileHandle *CFH)
static int getc_none(CompressFileHandle *CFH)
static void EndCompressorNone(ArchiveHandle *AH, CompressorState *cs)
Definition: compress_none.c:56
static bool write_none(const void *ptr, size_t size, CompressFileHandle *CFH)
void InitCompressorNone(CompressorState *cs, const pg_compress_specification compression_spec)
Definition: compress_none.c:66
static bool eof_none(CompressFileHandle *CFH)
static char * gets_none(char *ptr, int size, CompressFileHandle *CFH)
void InitCompressFileHandleNone(CompressFileHandle *CFH, const pg_compress_specification compression_spec)
static bool open_write_none(const char *path, const char *mode, CompressFileHandle *CFH)
static bool read_none(void *ptr, size_t size, size_t *rsize, CompressFileHandle *CFH)
Definition: compress_none.c:87
static void WriteDataToArchiveNone(ArchiveHandle *AH, CompressorState *cs, const void *data, size_t dLen)
Definition: compress_none.c:49
static bool open_none(const char *path, int fd, const char *mode, CompressFileHandle *CFH)
static void ReadDataFromArchiveNone(ArchiveHandle *AH, CompressorState *cs)
Definition: compress_none.c:30
static const char * get_error_none(CompressFileHandle *CFH)
void * pg_malloc(size_t size)
Definition: fe_memutils.c:47
#define free(a)
Definition: header.h:65
if(TABLE==NULL||TABLE_index==NULL)
Definition: isn.c:76
void ahwrite(const void *ptr, size_t size, size_t nmemb, ArchiveHandle *AH)
#define pg_fatal(...)
static PgChecksumMode mode
Definition: pg_checksums.c:55
const void * data
static char * buf
Definition: pg_test_fsync.c:72
#define strerror
Definition: port.h:252
static int fd(const char *x, int i)
Definition: preproc-init.c:105
static pg_noinline void Size size
Definition: slab.c:607
char *(* gets_func)(char *s, int size, CompressFileHandle *CFH)
Definition: compress_io.h:152
bool(* open_write_func)(const char *path, const char *mode, CompressFileHandle *CFH)
Definition: compress_io.h:122
bool(* write_func)(const void *ptr, size_t size, struct CompressFileHandle *CFH)
Definition: compress_io.h:139
int(* getc_func)(CompressFileHandle *CFH)
Definition: compress_io.h:161
const char *(* get_error_func)(CompressFileHandle *CFH)
Definition: compress_io.h:181
bool(* eof_func)(CompressFileHandle *CFH)
Definition: compress_io.h:168
bool(* open_func)(const char *path, int fd, const char *mode, CompressFileHandle *CFH)
Definition: compress_io.h:111
bool(* close_func)(CompressFileHandle *CFH)
Definition: compress_io.h:175
bool(* read_func)(void *ptr, size_t size, size_t *rsize, CompressFileHandle *CFH)
Definition: compress_io.h:131
void(* readData)(ArchiveHandle *AH, CompressorState *cs)
Definition: compress_io.h:56
pg_compress_specification compression_spec
Definition: compress_io.h:82
void(* end)(ArchiveHandle *AH, CompressorState *cs)
Definition: compress_io.h:67
ReadFunc readF
Definition: compress_io.h:72
void(* writeData)(ArchiveHandle *AH, CompressorState *cs, const void *data, size_t dLen)
Definition: compress_io.h:61
WriteFunc writeF
Definition: compress_io.h:77