librazor/razor-internal.h
changeset 250 ce5402017488
parent 241 c3eb520e2219
child 258 29d5002bd17f
     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 18:26:46 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);