@@ -396,9 +396,12 @@ int make_bsdiff_delta(char *old_filename, char *new_filename, char *delta_filena
396
396
off_t first_block ;
397
397
int c_enc , d_enc , e_enc ;
398
398
enc_flags_t encodings ;
399
+ char delta_filename_unique [2 * PATH_MAX ];
399
400
400
401
struct header_v20 large_header ;
401
402
struct header_v21 small_header ;
403
+
404
+ sprintf (delta_filename_unique , "%s.%i" , delta_filename , getpid ());
402
405
FILE * pf ;
403
406
404
407
ret = lstat (old_filename , & old_stat );
@@ -411,6 +414,8 @@ int make_bsdiff_delta(char *old_filename, char *new_filename, char *delta_filena
411
414
return -1 ;
412
415
}
413
416
417
+ ret = 0 ;
418
+
414
419
if (S_ISDIR (new_stat .st_mode ) || S_ISDIR (old_stat .st_mode )) {
415
420
/* no delta on symlinks ! */
416
421
return -1 ;
@@ -790,7 +795,7 @@ int make_bsdiff_delta(char *old_filename, char *new_filename, char *delta_filena
790
795
791
796
/* Create the patch file */
792
797
793
- efd = open (delta_filename , O_CREAT | O_EXCL | O_WRONLY , 00644 );
798
+ efd = open (delta_filename_unique , O_CREAT | O_EXCL | O_WRONLY , 00644 );
794
799
if (efd < 0 ) {
795
800
ret = -1 ;
796
801
goto fulldl_free ;
@@ -945,6 +950,7 @@ int make_bsdiff_delta(char *old_filename, char *new_filename, char *delta_filena
945
950
if (fclose (pf )) {
946
951
ret = -1 ;
947
952
}
953
+ rename (delta_filename_unique , delta_filename );
948
954
fulldl_free :
949
955
/* Free the memory we used */
950
956
munmap (old_data , old_size );
0 commit comments