aboutsummaryrefslogtreecommitdiff
path: root/src/triplet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/triplet.c')
-rw-r--r--src/triplet.c26
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;
}

Return to:

Send suggestions and report system problems to the System administrator.