@@ -841,7 +841,7 @@ static char *get_nth_line(long line, unsigned long *ends, void *data)
841841
842842static void print_line (const char * prefix , char first ,
843843 long line , unsigned long * ends , void * data ,
844- const char * color , const char * reset )
844+ const char * color , const char * reset , FILE * file )
845845{
846846 char * begin = get_nth_line (line , ends , data );
847847 char * end = get_nth_line (line + 1 , ends , data );
@@ -852,14 +852,14 @@ static void print_line(const char *prefix, char first,
852852 had_nl = 1 ;
853853 }
854854
855- fputs (prefix , stdout );
856- fputs (color , stdout );
857- putchar (first );
858- fwrite (begin , 1 , end - begin , stdout );
859- fputs (reset , stdout );
860- putchar ('\n' );
855+ fputs (prefix , file );
856+ fputs (color , file );
857+ putc (first , file );
858+ fwrite (begin , 1 , end - begin , file );
859+ fputs (reset , file );
860+ putc ('\n' , file );
861861 if (!had_nl )
862- fputs ("\\ No newline at end of file\n" , stdout );
862+ fputs ("\\ No newline at end of file\n" , file );
863863}
864864
865865static char * output_prefix (struct diff_options * opt )
@@ -898,12 +898,12 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
898898 fill_line_ends (pair -> one , & p_lines , & p_ends );
899899 fill_line_ends (pair -> two , & t_lines , & t_ends );
900900
901- printf ( "%s%sdiff --git a/%s b/%s%s\n" , prefix , c_meta , pair -> one -> path , pair -> two -> path , c_reset );
902- printf ( "%s%s--- %s%s%s\n" , prefix , c_meta ,
901+ fprintf ( opt -> file , "%s%sdiff --git a/%s b/%s%s\n" , prefix , c_meta , pair -> one -> path , pair -> two -> path , c_reset );
902+ fprintf ( opt -> file , "%s%s--- %s%s%s\n" , prefix , c_meta ,
903903 pair -> one -> sha1_valid ? "a/" : "" ,
904904 pair -> one -> sha1_valid ? pair -> one -> path : "/dev/null" ,
905905 c_reset );
906- printf ( "%s%s+++ b/%s%s\n" , prefix , c_meta , pair -> two -> path , c_reset );
906+ fprintf ( opt -> file , "%s%s+++ b/%s%s\n" , prefix , c_meta , pair -> two -> path , c_reset );
907907 for (i = 0 ; i < range -> ranges .nr ; i ++ ) {
908908 long p_start , p_end ;
909909 long t_start = range -> ranges .ranges [i ].start ;
@@ -945,26 +945,26 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
945945 }
946946
947947 /* Now output a diff hunk for this range */
948- printf ( "%s%s@@ -%ld,%ld +%ld,%ld @@%s\n" ,
948+ fprintf ( opt -> file , "%s%s@@ -%ld,%ld +%ld,%ld @@%s\n" ,
949949 prefix , c_frag ,
950950 p_start + 1 , p_end - p_start , t_start + 1 , t_end - t_start ,
951951 c_reset );
952952 while (j < diff -> target .nr && diff -> target .ranges [j ].start < t_end ) {
953953 int k ;
954954 for (; t_cur < diff -> target .ranges [j ].start ; t_cur ++ )
955955 print_line (prefix , ' ' , t_cur , t_ends , pair -> two -> data ,
956- c_context , c_reset );
956+ c_context , c_reset , opt -> file );
957957 for (k = diff -> parent .ranges [j ].start ; k < diff -> parent .ranges [j ].end ; k ++ )
958958 print_line (prefix , '-' , k , p_ends , pair -> one -> data ,
959- c_old , c_reset );
959+ c_old , c_reset , opt -> file );
960960 for (; t_cur < diff -> target .ranges [j ].end && t_cur < t_end ; t_cur ++ )
961961 print_line (prefix , '+' , t_cur , t_ends , pair -> two -> data ,
962- c_new , c_reset );
962+ c_new , c_reset , opt -> file );
963963 j ++ ;
964964 }
965965 for (; t_cur < t_end ; t_cur ++ )
966966 print_line (prefix , ' ' , t_cur , t_ends , pair -> two -> data ,
967- c_context , c_reset );
967+ c_context , c_reset , opt -> file );
968968 }
969969
970970 free (p_ends );
@@ -977,7 +977,7 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
977977 */
978978static void dump_diff_hacky (struct rev_info * rev , struct line_log_data * range )
979979{
980- puts ( output_prefix (& rev -> diffopt ));
980+ fprintf ( rev -> diffopt . file , "%s\n" , output_prefix (& rev -> diffopt ));
981981 while (range ) {
982982 dump_diff_hacky_one (rev , range );
983983 range = range -> next ;
0 commit comments