find_containing_dir(): use strbuf in implementation of this function
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Michael Haggerty committed
Apr 27, 2012 at 00:27 UTC
5fa0441844b1d23e6a2a3c369651dc8c13712ef6
1 file changed
+10
-9
refs.c
+10
-9
@@ -309,20 +309,21 @@ static struct ref_entry *search_for_subdir(struct ref_dir *dir,
309
static struct ref_dir *find_containing_dir(struct ref_dir *dir,
310
const char *refname, int mkdir)
311
{
312
- char *refname_copy = xstrdup(refname);
313
- char *slash;
314
- struct ref_entry *entry;
315
- for (slash = strchr(refname_copy, '/'); slash; slash = strchr(slash + 1, '/')) {
316
- char tmp = slash[1];
317
- slash[1] = '\0';
318
- entry = search_for_subdir(dir, refname_copy, mkdir);
319
- slash[1] = tmp;
312
+ struct strbuf dirname;
313
+ const char *slash;
314
+ strbuf_init(&dirname, PATH_MAX);
315
+ for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
316
+ struct ref_entry *entry;
317
+ strbuf_add(&dirname,
318
+ refname + dirname.len,
319
+ (slash + 1) - (refname + dirname.len));
320
+ entry = search_for_subdir(dir, dirname.buf, mkdir);
321
if (!entry)
322
break;
323
dir = &entry->u.subdir;
324
}
325
325
- free(refname_copy);
326
+ strbuf_release(&dirname);
327
return dir;
328
}
329