@@ -737,26 +737,30 @@ int reftable_addition_add(struct reftable_addition *add,
737
737
struct strbuf tab_file_name = STRBUF_INIT ;
738
738
struct strbuf next_name = STRBUF_INIT ;
739
739
struct reftable_writer * wr = NULL ;
740
+ struct tempfile * tab_file = NULL ;
740
741
int err = 0 ;
741
- int tab_fd = 0 ;
742
+ int tab_fd ;
742
743
743
744
strbuf_reset (& next_name );
744
745
format_name (& next_name , add -> next_update_index , add -> next_update_index );
745
746
746
747
stack_filename (& temp_tab_file_name , add -> stack , next_name .buf );
747
748
strbuf_addstr (& temp_tab_file_name , ".temp.XXXXXX" );
748
749
749
- tab_fd = mkstemp (temp_tab_file_name .buf );
750
- if (tab_fd < 0 ) {
750
+ tab_file = mks_tempfile (temp_tab_file_name .buf );
751
+ if (! tab_file ) {
751
752
err = REFTABLE_IO_ERROR ;
752
753
goto done ;
753
754
}
754
755
if (add -> stack -> config .default_permissions ) {
755
- if (chmod (temp_tab_file_name .buf , add -> stack -> config .default_permissions )) {
756
+ if (chmod (get_tempfile_path (tab_file ),
757
+ add -> stack -> config .default_permissions )) {
756
758
err = REFTABLE_IO_ERROR ;
757
759
goto done ;
758
760
}
759
761
}
762
+ tab_fd = get_tempfile_fd (tab_file );
763
+
760
764
wr = reftable_new_writer (reftable_fd_write , reftable_fd_flush , & tab_fd ,
761
765
& add -> stack -> config );
762
766
err = write_table (wr , arg );
@@ -771,14 +775,13 @@ int reftable_addition_add(struct reftable_addition *add,
771
775
if (err < 0 )
772
776
goto done ;
773
777
774
- err = close (tab_fd );
775
- tab_fd = 0 ;
778
+ err = close_tempfile_gently (tab_file );
776
779
if (err < 0 ) {
777
780
err = REFTABLE_IO_ERROR ;
778
781
goto done ;
779
782
}
780
783
781
- err = stack_check_addition (add -> stack , temp_tab_file_name . buf );
784
+ err = stack_check_addition (add -> stack , get_tempfile_path ( tab_file ) );
782
785
if (err < 0 )
783
786
goto done ;
784
787
@@ -789,14 +792,13 @@ int reftable_addition_add(struct reftable_addition *add,
789
792
790
793
format_name (& next_name , wr -> min_update_index , wr -> max_update_index );
791
794
strbuf_addstr (& next_name , ".ref" );
792
-
793
795
stack_filename (& tab_file_name , add -> stack , next_name .buf );
794
796
795
797
/*
796
798
On windows, this relies on rand() picking a unique destination name.
797
799
Maybe we should do retry loop as well?
798
800
*/
799
- err = rename ( temp_tab_file_name . buf , tab_file_name .buf );
801
+ err = rename_tempfile ( & tab_file , tab_file_name .buf );
800
802
if (err < 0 ) {
801
803
err = REFTABLE_IO_ERROR ;
802
804
goto done ;
@@ -806,14 +808,7 @@ int reftable_addition_add(struct reftable_addition *add,
806
808
add -> new_tables_cap );
807
809
add -> new_tables [add -> new_tables_len ++ ] = strbuf_detach (& next_name , NULL );
808
810
done :
809
- if (tab_fd > 0 ) {
810
- close (tab_fd );
811
- tab_fd = 0 ;
812
- }
813
- if (temp_tab_file_name .len > 0 ) {
814
- unlink (temp_tab_file_name .buf );
815
- }
816
-
811
+ delete_tempfile (& tab_file );
817
812
strbuf_release (& temp_tab_file_name );
818
813
strbuf_release (& tab_file_name );
819
814
strbuf_release (& next_name );
0 commit comments