@@ -72,6 +72,8 @@ backup_data_file(const char *from_root, const char *to_root,
72
72
size_t read_len = 0 ;
73
73
pg_crc32 crc ;
74
74
off_t offset ;
75
+ char write_buffer [sizeof (header )+ BLCKSZ ];
76
+ size_t write_buffer_real_size ;
75
77
76
78
INIT_CRC32C (crc );
77
79
@@ -212,10 +214,15 @@ backup_data_file(const char *from_root, const char *to_root,
212
214
upper_offset = header .hole_offset + header .hole_length ;
213
215
upper_length = BLCKSZ - upper_offset ;
214
216
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
+
215
224
/* 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 )
219
226
{
220
227
int errno_tmp = errno ;
221
228
/* oops */
@@ -331,10 +338,15 @@ backup_data_file(const char *from_root, const char *to_root,
331
338
upper_offset = header .hole_offset + header .hole_length ;
332
339
upper_length = BLCKSZ - upper_offset ;
333
340
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
+
334
348
/* 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 )
338
350
{
339
351
int errno_tmp = errno ;
340
352
/* oops */