1.1 --- a/librazor/merger.c Wed Apr 22 15:09:17 2009 +0100
1.2 +++ b/librazor/merger.c Thu Jul 02 11:31:03 2009 +0100
1.3 @@ -1,6 +1,7 @@
1.4 /*
1.5 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
1.6 * Copyright (C) 2008 Red Hat, Inc
1.7 + * Copyright (C) 2009 J. Ali Harlow <ali@juiblex.co.uk>
1.8 *
1.9 * This program is free software; you can redistribute it and/or modify
1.10 * it under the terms of the GNU General Public License as published by
1.11 @@ -18,6 +19,7 @@
1.12 */
1.13
1.14 #include <string.h>
1.15 +#include <assert.h>
1.16 #include "razor-internal.h"
1.17 #include "razor.h"
1.18
1.19 @@ -30,6 +32,7 @@
1.20 };
1.21
1.22 struct razor_merger {
1.23 + int committed;
1.24 struct razor_set *set;
1.25 struct hashtable table;
1.26 struct hashtable file_table;
1.27 @@ -79,6 +82,8 @@
1.28 struct source *source;
1.29 uint32_t flags;
1.30
1.31 + assert(merger->committed == 0);
1.32 +
1.33 set1 = merger->source1.set;
1.34 if (set1->packages.data <= (void *) package &&
1.35 (void *) package < set1->packages.data + set1->packages.size) {
1.36 @@ -111,6 +116,15 @@
1.37 source->file_map[r->data] = 1;
1.38 r = list_next(r);
1.39 }
1.40 +
1.41 + p->preun.program = hashtable_tokenize(&merger->table,
1.42 + &pool[package->preun.program]);
1.43 + p->preun.body = hashtable_tokenize(&merger->table,
1.44 + &pool[package->preun.body]);
1.45 + p->postun.program = hashtable_tokenize(&merger->table,
1.46 + &pool[package->postun.program]);
1.47 + p->postun.body = hashtable_tokenize(&merger->table,
1.48 + &pool[package->postun.body]);
1.49 }
1.50
1.51 static uint32_t
1.52 @@ -481,9 +495,8 @@
1.53 }
1.54
1.55 struct razor_set *
1.56 -razor_merger_finish(struct razor_merger *merger)
1.57 +razor_merger_commit(struct razor_merger *merger)
1.58 {
1.59 - struct razor_set *result;
1.60 struct razor_package *p, *pend;
1.61
1.62 /* As we built the package list, we filled out a bitvector of
1.63 @@ -523,10 +536,49 @@
1.64 rebuild_property_package_lists(merger->set);
1.65 rebuild_file_package_lists(merger->set);
1.66
1.67 - result = merger->set;
1.68 + merger->committed = 1;
1.69 +
1.70 + return merger->set;
1.71 +}
1.72 +
1.73 +void
1.74 +razor_merger_package_add_script(struct razor_merger *merger,
1.75 + struct razor_package *package,
1.76 + enum razor_property_flags script,
1.77 + const char *program, const char *body)
1.78 +{
1.79 + uint32_t p, b;
1.80 + char *pool;
1.81 + struct razor_set *set = merger->set;
1.82 + assert ((void *)package >= set->packages.data && \
1.83 + (void *)package < set->packages.data + set->packages.size);
1.84 +
1.85 + p = hashtable_tokenize(&merger->table, program);
1.86 + b = hashtable_tokenize(&merger->table, body);
1.87 +
1.88 + pool = merger->set->string_pool.data;
1.89 +
1.90 + switch (script) {
1.91 + case RAZOR_PROPERTY_PREUN:
1.92 + assert(pool[package->preun.program] == '\0');
1.93 + assert(pool[package->preun.body] == '\0');
1.94 + package->preun.program = p;
1.95 + package->preun.body = b;
1.96 + break;
1.97 + case RAZOR_PROPERTY_POSTUN:
1.98 + assert(pool[package->postun.program] == '\0');
1.99 + assert(pool[package->postun.body] == '\0');
1.100 + package->postun.program = p;
1.101 + package->postun.body = b;
1.102 + break;
1.103 + default:
1.104 + break;
1.105 + }
1.106 +}
1.107 +
1.108 +void razor_merger_destroy(struct razor_merger *merger)
1.109 +{
1.110 hashtable_release(&merger->table);
1.111 hashtable_release(&merger->file_table);
1.112 free(merger);
1.113 -
1.114 - return result;
1.115 }