@@ -72,6 +72,8 @@ backup_data_file(const char *from_root, const char *to_root,
7272size_t read_len = 0 ;
7373pg_crc32 crc ;
7474off_t offset ;
75+ char write_buffer [sizeof (header )+ BLCKSZ ];
76+ size_t write_buffer_real_size ;
7577
7678INIT_CRC32C (crc );
7779
@@ -212,10 +214,15 @@ backup_data_file(const char *from_root, const char *to_root,
212214upper_offset = header .hole_offset + header .hole_length ;
213215upper_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{
220227int errno_tmp = errno ;
221228/* oops */
@@ -331,10 +338,15 @@ backup_data_file(const char *from_root, const char *to_root,
331338upper_offset = header .hole_offset + header .hole_length ;
332339upper_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{
339351int errno_tmp = errno ;
340352/* oops */