60 "{ \"PostgreSQL-Backup-Manifest-Version\": 2,\n"
80 uint8 *checksum_payload)
82 int pathlen = strlen(manifest_path);
112 "%Y-%m-%d %H:%M:%S %Z",
116 if (mwriter->
buf.
len > 128 * 1024)
119 if (checksum_length > 0)
122 ", \"Checksum-Algorithm\": \"%s\", \"Checksum\": \"",
134 if (mwriter->
buf.
len > 128 * 1024)
155 for (wal_range = first_wal_range; wal_range != NULL;
156 wal_range = wal_range->
next)
158 "%s{ \"Timeline\": %u, \"Start-LSN\": \"%X/%X\", \"End-LSN\": \"%X/%X\" }",
159 wal_range == first_wal_range ?
"" :
",\n",
200 for (p =
str; *p; p++)
226 if ((
unsigned char) *p <
' ')
246 if (mwriter->
fd == -1 &&
257 if (wb != mwriter->
buf.
len)
262 pg_fatal(
"could not write file \"%s\": wrote %d of %d",
270 pg_fatal(
"could not update checksum of file \"%s\"",
286 unsigned n1 = (*src >> 4) & 0xF;
287 unsigned n2 = *src & 0xF;
289 *dst++ = n1 < 10 ?
'0' + n1 :
'a' + n1 - 10;
290 *dst++ = n2 < 10 ?
'0' + n2 :
'a' + n2 - 10;
int pg_checksum_final(pg_checksum_context *context, uint8 *output)
char * pg_checksum_type_name(pg_checksum_type type)
int pg_checksum_update(pg_checksum_context *context, const uint8 *input, size_t len)
int pg_checksum_init(pg_checksum_context *context, pg_checksum_type type)
void * pg_malloc(size_t size)
Assert(PointerIsAligned(start, uint64))
#define PG_SHA256_DIGEST_LENGTH
#define PG_SHA256_DIGEST_STRING_LENGTH
void resetStringInfo(StringInfo str)
void appendStringInfo(StringInfo str, const char *fmt,...)
void enlargeStringInfo(StringInfo str, int needed)
void appendStringInfoString(StringInfo str, const char *s)
void appendStringInfoChar(StringInfo str, char ch)
void initStringInfo(StringInfo str)
#define appendStringInfoCharMacro(str, ch)
struct manifest_wal_range * next
pg_checksum_context manifest_ctx
int pg_encoding_verifymbstr(int encoding, const char *mbstr, int len)
static void flush_manifest(manifest_writer *mwriter)
manifest_writer * create_manifest_writer(char *directory, uint64 system_identifier)
void add_file_to_manifest(manifest_writer *mwriter, const char *manifest_path, uint64 size, time_t mtime, pg_checksum_type checksum_type, int checksum_length, uint8 *checksum_payload)
static size_t hex_encode(const uint8 *src, size_t len, char *dst)
void finalize_manifest(manifest_writer *mwriter, manifest_wal_range *first_wal_range)
static void escape_json(StringInfo buf, const char *str)
#define LSN_FORMAT_ARGS(lsn)
static const char * directory