Use strings to identify section types in the on-disk repo format.
Previously, a given razor file type had a fixed number of sections in a
fixed order, identified by an integer type. Now, sections are identified
by a named string (stored in a string pool after the section lists).
This will allow for razor files to contain arbitrary sections.
For bonus points, also drop the 4k section alignment and change the
magic byte string to "RZDB".
committer: Kristian H?gsberg <krh@redhat.com>
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 uint32_t num_sections;
96 #define RAZOR_MAGIC 0x525a4442
97 #define RAZOR_VERSION 1
99 #define RAZOR_STRING_POOL "string_pool"
100 #define RAZOR_PACKAGES "packages"
101 #define RAZOR_PROPERTIES "properties"
102 #define RAZOR_PACKAGE_POOL "package_pool"
103 #define RAZOR_PROPERTY_POOL "property_pool"
105 #define RAZOR_DETAILS_STRING_POOL "details_string_pool"
107 #define RAZOR_FILES "files"
108 #define RAZOR_FILE_POOL "file_pool"
109 #define RAZOR_FILE_STRING_POOL "file_string_pool"
111 struct razor_package {
117 uint32_t description;
120 struct list_head properties;
121 struct list_head files;
125 struct razor_property {
129 struct list_head packages;
136 struct list_head packages;
139 #define RAZOR_ENTRY_LAST 0x80
142 struct array string_pool;
143 struct array packages;
144 struct array properties;
146 struct array package_pool;
147 struct array property_pool;
148 struct array file_pool;
149 struct array file_string_pool;
150 struct array details_string_pool;
152 struct razor_set_header *header;
155 struct razor_set_header *details_header;
156 size_t details_header_size;
158 struct razor_set_header *files_header;
159 size_t files_header_size;
162 struct import_entry {
167 struct import_directory {
168 uint32_t name, count;
170 struct array packages;
171 struct import_directory *last;
174 struct razor_importer {
175 struct razor_set *set;
176 struct hashtable table;
177 struct hashtable file_table;
178 struct hashtable details_table;
179 struct razor_package *package;
180 struct array properties;
182 struct array file_requires;
185 struct razor_package_iterator {
186 struct razor_set *set;
187 struct razor_package *package, *end;
193 razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
194 struct razor_set *set,
195 struct razor_property *property);
197 struct razor_property_iterator {
198 struct razor_set *set;
199 struct razor_property *property, *end;
204 razor_set_find_entry(struct razor_set *set,
205 struct razor_entry *dir, const char *pattern);
207 struct razor_merger *
208 razor_merger_create(struct razor_set *set1, struct razor_set *set2);
210 razor_merger_add_package(struct razor_merger *merger,
211 struct razor_package *package);
213 razor_merger_finish(struct razor_merger *merger);
215 /* Utility functions */
218 razor_package_get_details_varg(struct razor_set *set,
219 struct razor_package *package,
222 int razor_create_dir(const char *root, const char *path);
223 int razor_write(int fd, const void *data, size_t size);
226 typedef int (*razor_compare_with_data_func_t)(const void *p1,
230 razor_qsort_with_data(void *base, size_t nelem, size_t size,
231 razor_compare_with_data_func_t compare, void *data);
233 #endif /* _RAZOR_INTERNAL_H_ */