Skip to content

Commit 8cfc6be

Browse files
committed
Use one fwrite+memcpy insted three fwrite.
1 parent f69e780 commit 8cfc6be

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

data.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ backup_data_file(const char *from_root, const char *to_root,
7272
size_t read_len = 0;
7373
pg_crc32 crc;
7474
off_t offset;
75+
char write_buffer[sizeof(header)+BLCKSZ];
76+
size_t write_buffer_real_size;
7577

7678
INIT_CRC32C(crc);
7779

@@ -212,10 +214,15 @@ backup_data_file(const char *from_root, const char *to_root,
212214
upper_offset = header.hole_offset + header.hole_length;
213215
upper_length = BLCKSZ - upper_offset;
214216

217+
write_buffer_real_size = sizeof(header)+header.hole_offset+upper_length;
218+
memcpy(write_buffer, &header, sizeof(header));
219+
if (header.hole_offset)
220+
memcpy(write_buffer+sizeof(header), page.data, header.hole_offset);
221+
if (upper_length)
222+
memcpy(write_buffer+sizeof(header)+header.hole_offset, page.data + upper_offset, upper_length);
223+
215224
/* write data page excluding hole */
216-
if (fwrite(&header, 1, sizeof(header), out) != sizeof(header) ||
217-
fwrite(page.data, 1, header.hole_offset, out) != header.hole_offset ||
218-
fwrite(page.data + upper_offset, 1, upper_length, out) != upper_length)
225+
if(fwrite(write_buffer, 1, write_buffer_real_size, out) != write_buffer_real_size)
219226
{
220227
int errno_tmp = errno;
221228
/* oops */
@@ -331,10 +338,15 @@ backup_data_file(const char *from_root, const char *to_root,
331338
upper_offset = header.hole_offset + header.hole_length;
332339
upper_length = BLCKSZ - upper_offset;
333340

341+
write_buffer_real_size = sizeof(header)+header.hole_offset+upper_length;
342+
memcpy(write_buffer, &header, sizeof(header));
343+
if (header.hole_offset)
344+
memcpy(write_buffer+sizeof(header), page.data, header.hole_offset);
345+
if (upper_length)
346+
memcpy(write_buffer+sizeof(header)+header.hole_offset, page.data + upper_offset, upper_length);
347+
334348
/* write data page excluding hole */
335-
if (fwrite(&header, 1, sizeof(header), out) != sizeof(header) ||
336-
fwrite(page.data, 1, header.hole_offset, out) != header.hole_offset ||
337-
fwrite(page.data + upper_offset, 1, upper_length, out) != upper_length)
349+
if(fwrite(write_buffer, 1, write_buffer_real_size, out) != write_buffer_real_size)
338350
{
339351
int errno_tmp = errno;
340352
/* oops */

0 commit comments

Comments
 (0)