Always open all three rzdb files when we're merging package sets.
2 * Copyright (C) 2008 Kristian Høgsberg <krh@redhat.com>
3 * Copyright (C) 2008 Red Hat, Inc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #ifndef _RAZOR_INTERNAL_H_
21 #define _RAZOR_INTERNAL_H_
30 #if defined(__GNUC__) && __GNUC__ >= 4
31 #define RAZOR_EXPORT __attribute__ ((visibility("default")))
36 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
37 #define ALIGN(value, base) (((value) + (base - 1)) & ~((base) - 1))
39 void *zalloc(size_t size);
46 void array_init(struct array *array);
47 void array_release(struct array *array);
48 void *array_add(struct array *array, int size);
52 uint32_t list_ptr : 24;
61 void list_set_empty(struct list_head *head);
62 void list_set_ptr(struct list_head *head, uint32_t ptr);
63 void list_set_array(struct list_head *head, struct array *pool, struct array *items, int force_indirect);
65 struct list *list_first(struct list_head *head, struct array *pool);
66 struct list *list_next(struct list *list);
68 void list_remap_pool(struct array *pool, uint32_t *map);
69 void list_remap_head(struct list_head *list, uint32_t *map);
77 void hashtable_init(struct hashtable *table, struct array *pool);
78 void hashtable_release(struct hashtable *table);
79 uint32_t hashtable_insert(struct hashtable *table, const char *key);
80 uint32_t hashtable_lookup(struct hashtable *table, const char *key);
81 uint32_t hashtable_tokenize(struct hashtable *table, const char *string);
84 struct razor_set_section {
90 struct razor_set_header {
93 struct razor_set_section sections[0];
96 #define RAZOR_MAGIC 0x7a7a7a7a
97 #define RAZOR_DETAILS_MAGIC 0x7a7a7a7b
98 #define RAZOR_FILES_MAGIC 0x7a7a7a7c
99 #define RAZOR_VERSION 1
101 #define RAZOR_STRING_POOL 0
102 #define RAZOR_PACKAGES 1
103 #define RAZOR_PROPERTIES 2
104 #define RAZOR_PACKAGE_POOL 3
105 #define RAZOR_PROPERTY_POOL 4
107 #define RAZOR_DETAILS_STRING_POOL 0
109 #define RAZOR_FILES 0
110 #define RAZOR_FILE_POOL 1
111 #define RAZOR_FILE_STRING_POOL 2
113 struct razor_package {
119 uint32_t description;
122 struct list_head properties;
123 struct list_head files;
127 struct razor_property {
131 struct list_head packages;
138 struct list_head packages;
141 #define RAZOR_ENTRY_LAST 0x80
144 struct array string_pool;
145 struct array packages;
146 struct array properties;
148 struct array package_pool;
149 struct array property_pool;
150 struct array file_pool;
151 struct array file_string_pool;
152 struct array details_string_pool;
153 struct razor_set_header *header;
154 struct razor_set_header *details_header;
155 struct razor_set_header *files_header;
158 struct import_entry {
163 struct import_directory {
164 uint32_t name, count;
166 struct array packages;
167 struct import_directory *last;
170 struct razor_importer {
171 struct razor_set *set;
172 struct hashtable table;
173 struct hashtable file_table;
174 struct hashtable details_table;
175 struct razor_package *package;
176 struct array properties;
178 struct array file_requires;
181 struct razor_package_iterator {
182 struct razor_set *set;
183 struct razor_package *package, *end;
189 razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
190 struct razor_set *set,
191 struct razor_property *property);
193 struct razor_property_iterator {
194 struct razor_set *set;
195 struct razor_property *property, *end;
200 razor_set_find_entry(struct razor_set *set,
201 struct razor_entry *dir, const char *pattern);
203 struct razor_merger *
204 razor_merger_create(struct razor_set *set1, struct razor_set *set2);
206 razor_merger_add_package(struct razor_merger *merger,
207 struct razor_package *package);
209 razor_merger_finish(struct razor_merger *merger);
211 /* Utility functions */
214 razor_package_get_details_varg(struct razor_set *set,
215 struct razor_package *package,
218 int razor_create_dir(const char *root, const char *path);
219 int razor_write(int fd, const void *data, size_t size);
222 typedef int (*razor_compare_with_data_func_t)(const void *p1,
226 razor_qsort_with_data(void *base, size_t nelem, size_t size,
227 razor_compare_with_data_func_t compare, void *data);
229 #endif /* _RAZOR_INTERNAL_H_ */