1.1 --- a/librazor/razor-internal.h Mon Jun 16 15:40:30 2008 -0400
1.2 +++ b/librazor/razor-internal.h Fri Jun 20 21:56:43 2008 -0400
1.3 @@ -1,8 +1,166 @@
1.4 #ifndef _RAZOR_INTERNAL_H_
1.5 #define _RAZOR_INTERNAL_H_
1.6
1.7 +#include <stdlib.h>
1.8 +#include <stdint.h>
1.9 +
1.10 +void *zalloc(size_t size);
1.11 +
1.12 +struct array {
1.13 + void *data;
1.14 + int size, alloc;
1.15 +};
1.16 +
1.17 +void array_init(struct array *array);
1.18 +void array_release(struct array *array);
1.19 +void *array_add(struct array *array, int size);
1.20 +
1.21 +
1.22 +struct list_head {
1.23 + uint32_t list_ptr : 24;
1.24 + uint32_t flags : 8;
1.25 +};
1.26 +
1.27 +struct list {
1.28 + uint32_t data : 24;
1.29 + uint32_t flags : 8;
1.30 +};
1.31 +
1.32 +void list_set_empty(struct list_head *head);
1.33 +void list_set_ptr(struct list_head *head, uint32_t ptr);
1.34 +void list_set_array(struct list_head *head, struct array *pool, struct array *items, int force_indirect);
1.35 +
1.36 +struct list *list_first(struct list_head *head, struct array *pool);
1.37 +struct list *list_next(struct list *list);
1.38 +
1.39 +void list_remap_pool(struct array *pool, uint32_t *map);
1.40 +void list_remap_head(struct list_head *list, uint32_t *map);
1.41 +
1.42 +
1.43 +struct hashtable {
1.44 + struct array buckets;
1.45 + struct array *pool;
1.46 +};
1.47 +
1.48 +void hashtable_init(struct hashtable *table, struct array *pool);
1.49 +void hashtable_release(struct hashtable *table);
1.50 +uint32_t hashtable_insert(struct hashtable *table, const char *key);
1.51 +uint32_t hashtable_lookup(struct hashtable *table, const char *key);
1.52 +uint32_t hashtable_tokenize(struct hashtable *table, const char *string);
1.53 +
1.54 +
1.55 +struct razor_set_section {
1.56 + uint32_t type;
1.57 + uint32_t offset;
1.58 + uint32_t size;
1.59 +};
1.60 +
1.61 +struct razor_set_header {
1.62 + uint32_t magic;
1.63 + uint32_t version;
1.64 + struct razor_set_section sections[0];
1.65 +};
1.66 +
1.67 +#define RAZOR_MAGIC 0x7a7a7a7a
1.68 +#define RAZOR_VERSION 1
1.69 +
1.70 +#define RAZOR_STRING_POOL 0
1.71 +#define RAZOR_PACKAGES 1
1.72 +#define RAZOR_PROPERTIES 2
1.73 +#define RAZOR_FILES 3
1.74 +#define RAZOR_PACKAGE_POOL 4
1.75 +#define RAZOR_PROPERTY_POOL 5
1.76 +#define RAZOR_FILE_POOL 6
1.77 +
1.78 +struct razor_package {
1.79 + uint32_t name : 24;
1.80 + uint32_t flags : 8;
1.81 + uint32_t version;
1.82 + uint32_t arch;
1.83 + struct list_head properties;
1.84 + struct list_head files;
1.85 +};
1.86 +
1.87 +struct razor_property {
1.88 + uint32_t name;
1.89 + uint32_t flags;
1.90 + uint32_t version;
1.91 + struct list_head packages;
1.92 +};
1.93 +
1.94 +struct razor_entry {
1.95 + uint32_t name : 24;
1.96 + uint32_t flags : 8;
1.97 + uint32_t start;
1.98 + struct list_head packages;
1.99 +};
1.100 +
1.101 +#define RAZOR_ENTRY_LAST 0x80
1.102 +
1.103 +struct razor_set {
1.104 + struct array string_pool;
1.105 + struct array packages;
1.106 + struct array properties;
1.107 + struct array files;
1.108 + struct array package_pool;
1.109 + struct array property_pool;
1.110 + struct array file_pool;
1.111 + struct razor_set_header *header;
1.112 +};
1.113 +
1.114 +struct import_entry {
1.115 + uint32_t package;
1.116 + char *name;
1.117 +};
1.118 +
1.119 +struct import_directory {
1.120 + uint32_t name, count;
1.121 + struct array files;
1.122 + struct array packages;
1.123 + struct import_directory *last;
1.124 +};
1.125 +
1.126 +struct razor_importer {
1.127 + struct razor_set *set;
1.128 + struct hashtable table;
1.129 + struct razor_package *package;
1.130 + struct array properties;
1.131 + struct array files;
1.132 + struct array file_requires;
1.133 +};
1.134 +
1.135 +struct razor_package_iterator {
1.136 + struct razor_set *set;
1.137 + struct razor_package *package, *end;
1.138 + struct list *index;
1.139 + int free_index;
1.140 +};
1.141 +
1.142 +void
1.143 +razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
1.144 + struct razor_set *set,
1.145 + struct razor_property *property);
1.146 +
1.147 +struct razor_property_iterator {
1.148 + struct razor_set *set;
1.149 + struct razor_property *property, *end;
1.150 + struct list *index;
1.151 +};
1.152 +
1.153 #define ALIGN(value, base) (((value) + (base - 1)) & ~((base) - 1))
1.154
1.155 +struct razor_entry *
1.156 +razor_set_find_entry(struct razor_set *set,
1.157 + struct razor_entry *dir, const char *pattern);
1.158 +
1.159 +struct razor_merger *
1.160 +razor_merger_create(struct razor_set *set1, struct razor_set *set2);
1.161 +void
1.162 +razor_merger_add_package(struct razor_merger *merger,
1.163 + struct razor_package *package);
1.164 +struct razor_set *
1.165 +razor_merger_finish(struct razor_merger *merger);
1.166 +
1.167 /* Utility functions */
1.168
1.169 int razor_create_dir(const char *root, const char *path);