Add support for preloading lua modules. This is useful both when
providing lua bindings to applications based on librazor and when
producing static binaries using librazor (where otherwise the lua
POSIX library would need to be included as an additional dynamic
object).
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_
31 #if defined(__GNUC__) && __GNUC__ >= 4
32 #define RAZOR_EXPORT __attribute__ ((visibility("default")))
37 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
38 #define ALIGN(value, base) (((value) + (base - 1)) & ~((base) - 1))
40 void *zalloc(size_t size);
47 void array_init(struct array *array);
48 void array_release(struct array *array);
49 void *array_add(struct array *array, int size);
53 uint32_t list_ptr : 24;
62 void list_set_empty(struct list_head *head);
63 void list_set_ptr(struct list_head *head, uint32_t ptr);
64 void list_set_array(struct list_head *head, struct array *pool, struct array *items, int force_indirect);
66 struct list *list_first(struct list_head *head, struct array *pool);
67 struct list *list_next(struct list *list);
69 void list_remap_pool(struct array *pool, uint32_t *map);
70 void list_remap_head(struct list_head *list, uint32_t *map);
78 void hashtable_init(struct hashtable *table, struct array *pool);
79 void hashtable_release(struct hashtable *table);
80 uint32_t hashtable_insert(struct hashtable *table, const char *key);
81 uint32_t hashtable_lookup(struct hashtable *table, const char *key);
82 uint32_t hashtable_tokenize(struct hashtable *table, const char *string);
85 struct razor_set_section {
91 struct razor_set_header {
94 uint32_t num_sections;
97 #define RAZOR_MAGIC 0x525a4442
98 #define RAZOR_VERSION 1
100 #define RAZOR_STRING_POOL "string_pool"
101 #define RAZOR_PACKAGES "packages"
102 #define RAZOR_PROPERTIES "properties"
103 #define RAZOR_PACKAGE_POOL "package_pool"
104 #define RAZOR_PROPERTY_POOL "property_pool"
106 #define RAZOR_DETAILS_STRING_POOL "details_string_pool"
108 #define RAZOR_FILES "files"
109 #define RAZOR_FILE_POOL "file_pool"
110 #define RAZOR_FILE_STRING_POOL "file_string_pool"
112 struct razor_package {
113 unsigned int name : 24;
114 unsigned int flags : 8;
118 uint32_t description;
121 struct list_head properties;
122 struct list_head files;
126 struct razor_property {
130 struct list_head packages;
137 struct list_head packages;
140 #define RAZOR_ENTRY_LAST 0x80
143 struct array string_pool;
144 struct array packages;
145 struct array properties;
147 struct array package_pool;
148 struct array property_pool;
149 struct array file_pool;
150 struct array file_string_pool;
151 struct array details_string_pool;
153 struct razor_set_header *header;
156 struct razor_set_header *details_header;
157 size_t details_header_size;
159 struct razor_set_header *files_header;
160 size_t files_header_size;
163 struct import_entry {
168 struct import_directory {
169 uint32_t name, count;
171 struct array packages;
172 struct import_directory *last;
175 struct razor_importer {
176 struct razor_set *set;
177 struct hashtable table;
178 struct hashtable file_table;
179 struct hashtable details_table;
180 struct razor_package *package;
181 struct array properties;
183 struct array file_requires;
186 struct razor_package_iterator {
187 struct razor_set *set;
188 struct razor_package *package, *end;
194 razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
195 struct razor_set *set,
196 struct razor_property *property);
198 struct razor_property_iterator {
199 struct razor_set *set;
200 struct razor_property *property, *end;
204 struct razor_file_iterator {
205 struct razor_set *set;
211 razor_set_find_entry(struct razor_set *set,
212 struct razor_entry *dir, const char *pattern);
214 struct razor_merger *
215 razor_merger_create(struct razor_set *set1, struct razor_set *set2);
217 razor_merger_add_package(struct razor_merger *merger,
218 struct razor_package *package);
220 razor_merger_finish(struct razor_merger *merger);
222 int run_lua_script(const char *root, const char *name, const char *body,
225 /* Utility functions */
228 razor_package_get_details_varg(struct razor_set *set,
229 struct razor_package *package,
232 int razor_create_dir(const char *root, const char *path);
233 int razor_write(int fd, const void *data, size_t size);
235 void *razor_file_get_contents(const char *filename, size_t *length);
236 int razor_file_free_contents(void *addr, size_t length);
239 typedef int (*razor_compare_with_data_func_t)(const void *p1,
243 razor_qsort_with_data(void *base, size_t nelem, size_t size,
244 razor_compare_with_data_func_t compare, void *data);
246 #endif /* _RAZOR_INTERNAL_H_ */