@@ -266,6 +266,20 @@ struct add_p_state {
266
266
const char * revision ;
267
267
};
268
268
269
+ static void add_p_state_clear (struct add_p_state * s )
270
+ {
271
+ size_t i ;
272
+
273
+ strbuf_release (& s -> answer );
274
+ strbuf_release (& s -> buf );
275
+ strbuf_release (& s -> plain );
276
+ strbuf_release (& s -> colored );
277
+ for (i = 0 ; i < s -> file_diff_nr ; i ++ )
278
+ free (s -> file_diff [i ].hunk );
279
+ free (s -> file_diff );
280
+ clear_add_i_state (& s -> s );
281
+ }
282
+
269
283
static void err (struct add_p_state * s , const char * fmt , ...)
270
284
{
271
285
va_list args ;
@@ -1690,9 +1704,7 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
1690
1704
repo_refresh_and_write_index (r , REFRESH_QUIET , 0 , 1 ,
1691
1705
NULL , NULL , NULL ) < 0 ) ||
1692
1706
parse_diff (& s , ps ) < 0 ) {
1693
- strbuf_release (& s .plain );
1694
- strbuf_release (& s .colored );
1695
- clear_add_i_state (& s .s );
1707
+ add_p_state_clear (& s );
1696
1708
return -1 ;
1697
1709
}
1698
1710
@@ -1707,10 +1719,6 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
1707
1719
else if (binary_count == s .file_diff_nr )
1708
1720
fprintf (stderr , _ ("Only binary files changed.\n" ));
1709
1721
1710
- strbuf_release (& s .answer );
1711
- strbuf_release (& s .buf );
1712
- strbuf_release (& s .plain );
1713
- strbuf_release (& s .colored );
1714
- clear_add_i_state (& s .s );
1722
+ add_p_state_clear (& s );
1715
1723
return 0 ;
1716
1724
}
0 commit comments