@@ -59,14 +59,11 @@ static VOLATILE_LIST_HEAD(tempfile_list);
59
59
static void remove_template_directory (struct tempfile * tempfile ,
60
60
int in_signal_handler )
61
61
{
62
- if (tempfile -> directorylen > 0 &&
63
- tempfile -> directorylen < tempfile -> filename .len &&
64
- tempfile -> filename .buf [tempfile -> directorylen ] == '/' ) {
65
- strbuf_setlen (& tempfile -> filename , tempfile -> directorylen );
62
+ if (tempfile -> directory ) {
66
63
if (in_signal_handler )
67
- rmdir (tempfile -> filename . buf );
64
+ rmdir (tempfile -> directory );
68
65
else
69
- rmdir_or_warn (tempfile -> filename . buf );
66
+ rmdir_or_warn (tempfile -> directory );
70
67
}
71
68
}
72
69
@@ -115,7 +112,7 @@ static struct tempfile *new_tempfile(void)
115
112
tempfile -> owner = 0 ;
116
113
INIT_LIST_HEAD (& tempfile -> list );
117
114
strbuf_init (& tempfile -> filename , 0 );
118
- tempfile -> directorylen = 0 ;
115
+ tempfile -> directory = NULL ;
119
116
return tempfile ;
120
117
}
121
118
@@ -141,6 +138,7 @@ static void deactivate_tempfile(struct tempfile *tempfile)
141
138
{
142
139
tempfile -> active = 0 ;
143
140
strbuf_release (& tempfile -> filename );
141
+ free (tempfile -> directory );
144
142
volatile_list_del (& tempfile -> list );
145
143
free (tempfile );
146
144
}
@@ -254,7 +252,7 @@ struct tempfile *mks_tempfile_dt(const char *directory_template,
254
252
255
253
tempfile = new_tempfile ();
256
254
strbuf_swap (& tempfile -> filename , & sb );
257
- tempfile -> directorylen = directorylen ;
255
+ tempfile -> directory = xmemdupz ( tempfile -> filename . buf , directorylen ) ;
258
256
tempfile -> fd = fd ;
259
257
activate_tempfile (tempfile );
260
258
return tempfile ;
0 commit comments