diff options
Diffstat (limited to 'src/triplet.c')
-rw-r--r-- | src/triplet.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/triplet.c b/src/triplet.c index efe4a0b..ea57a08 100644 --- a/src/triplet.c +++ b/src/triplet.c @@ -42,7 +42,8 @@ hash_triplet_free (void *data) { int i; struct file_triplet *tp = data; - + struct uploader_info *up; + for (i = 0; i < FILE_TYPE_COUNT; i++) { if (tp->file[i].name) @@ -52,12 +53,27 @@ hash_triplet_free (void *data) free (tp->directive); free (tp->blurb); free (tp->tmp); - free (tp->check_diag); - /* FIXME: free uploader list */ + obstack_free (&tp->obstk, NULL); + + /* Free uploader list */ + for (up = tp->uploader_list; up; ) + { + struct uploader_info *next = up->next; + free (up); + up = next; + } free (tp); } +char * +triplet_strdup (struct file_triplet *tp, const char *str) +{ + size_t len = strlen (str); + obstack_grow (&tp->obstk, str, len + 1); + return obstack_finish (&tp->obstk); +} + /* Register a file in the triplet table */ void register_file (struct file_info *finfo, const struct spool *spool) @@ -79,7 +95,9 @@ register_file (struct file_info *finfo, const struct spool *spool) && (ret = hash_insert (triplet_table, tp)))) xalloc_die (); - if (ret != tp) + if (ret == tp) + obstack_init (&tp->obstk); + else free (tp); ret->file[finfo->type] = *finfo; } |