112 manifest_files_hash *ht;
121 if ((
fd = open(pathname, O_RDONLY |
PG_BINARY, 0)) < 0)
128 pg_fatal(
"could not open file \"%s\": %m", pathname);
133 pg_fatal(
"could not stat file \"%s\": %m", pathname);
140 ht = manifest_files_create(initial_size, NULL);
154 if (statbuf.st_size <= chunk_size)
157 rc =
read(
fd, buffer, statbuf.st_size);
158 if (rc != statbuf.st_size)
161 pg_fatal(
"could not read file \"%s\": %m", pathname);
163 pg_fatal(
"could not read file \"%s\": read %d of %lld",
164 pathname, rc, (
long long int) statbuf.st_size);
175 int bytes_left = statbuf.st_size;
182 while (bytes_left > 0)
184 int bytes_to_read = chunk_size;
191 if (bytes_left < chunk_size)
192 bytes_to_read = bytes_left;
193 else if (bytes_left < 2 * chunk_size)
194 bytes_to_read = bytes_left / 2;
195 rc =
read(
fd, buffer, bytes_to_read);
196 if (rc != bytes_to_read)
199 pg_fatal(
"could not read file \"%s\": %m", pathname);
201 pg_fatal(
"could not read file \"%s\": read %lld of %lld",
203 (
long long int) (statbuf.st_size + rc - bytes_left),
204 (
long long int) statbuf.st_size);
void * pg_malloc0(size_t size)
void * pg_malloc(size_t size)
#define ESTIMATED_BYTES_PER_MANIFEST_LINE
static void combinebackup_per_file_cb(JsonManifestParseContext *context, const char *pathname, uint64 size, pg_checksum_type checksum_type, int checksum_length, uint8 *checksum_payload)
static void report_manifest_error(JsonManifestParseContext *context, const char *fmt,...) pg_attribute_printf(2
static void combinebackup_version_cb(JsonManifestParseContext *context, int manifest_version)
static void combinebackup_per_wal_range_cb(JsonManifestParseContext *context, TimeLineID tli, XLogRecPtr start_lsn, XLogRecPtr end_lsn)
static void combinebackup_system_identifier_cb(JsonManifestParseContext *context, uint64 manifest_system_identifier)
void pfree(void *pointer)
void json_parse_manifest(JsonManifestParseContext *context, const char *buffer, size_t size)
JsonManifestParseIncrementalState * json_parse_manifest_incremental_init(JsonManifestParseContext *context)
void json_parse_manifest_incremental_shutdown(JsonManifestParseIncrementalState *incstate)
void json_parse_manifest_incremental_chunk(JsonManifestParseIncrementalState *incstate, const char *chunk, size_t size, bool is_last)
#define pg_log_warning(...)
static int fd(const char *x, int i)
manifest_files_hash * files