1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2025-02-12 14:56:08 +02:00

Use one fwrite+memcpy insted three fwrite.

This commit is contained in:
stalkerg 2016-09-06 19:22:43 +03:00
parent f69e780d37
commit 8cfc6bee84

24
data.c
View File

@ -72,6 +72,8 @@ backup_data_file(const char *from_root, const char *to_root,
size_t read_len = 0;
pg_crc32 crc;
off_t offset;
char write_buffer[sizeof(header)+BLCKSZ];
size_t write_buffer_real_size;
INIT_CRC32C(crc);
@ -212,10 +214,15 @@ backup_data_file(const char *from_root, const char *to_root,
upper_offset = header.hole_offset + header.hole_length;
upper_length = BLCKSZ - upper_offset;
write_buffer_real_size = sizeof(header)+header.hole_offset+upper_length;
memcpy(write_buffer, &header, sizeof(header));
if (header.hole_offset)
memcpy(write_buffer+sizeof(header), page.data, header.hole_offset);
if (upper_length)
memcpy(write_buffer+sizeof(header)+header.hole_offset, page.data + upper_offset, upper_length);
/* write data page excluding hole */
if (fwrite(&header, 1, sizeof(header), out) != sizeof(header) ||
fwrite(page.data, 1, header.hole_offset, out) != header.hole_offset ||
fwrite(page.data + upper_offset, 1, upper_length, out) != upper_length)
if(fwrite(write_buffer, 1, write_buffer_real_size, out) != write_buffer_real_size)
{
int errno_tmp = errno;
/* oops */
@ -331,10 +338,15 @@ backup_data_file(const char *from_root, const char *to_root,
upper_offset = header.hole_offset + header.hole_length;
upper_length = BLCKSZ - upper_offset;
write_buffer_real_size = sizeof(header)+header.hole_offset+upper_length;
memcpy(write_buffer, &header, sizeof(header));
if (header.hole_offset)
memcpy(write_buffer+sizeof(header), page.data, header.hole_offset);
if (upper_length)
memcpy(write_buffer+sizeof(header)+header.hole_offset, page.data + upper_offset, upper_length);
/* write data page excluding hole */
if (fwrite(&header, 1, sizeof(header), out) != sizeof(header) ||
fwrite(page.data, 1, header.hole_offset, out) != header.hole_offset ||
fwrite(page.data + upper_offset, 1, upper_length, out) != upper_length)
if(fwrite(write_buffer, 1, write_buffer_real_size, out) != write_buffer_real_size)
{
int errno_tmp = errno;
/* oops */