librazor/razor-internal.h
author James Bowes <jbowes@redhat.com>
Mon Jun 23 14:04:47 2008 -0400 (2008-06-23)
changeset 263 23c56c3f0449
parent 248 057933050c42
child 269 03fc85294bc9
permissions -rw-r--r--
Display progress when importing rpms
rhughes@241
     1
#ifndef _RAZOR_INTERNAL_H_
rhughes@241
     2
#define _RAZOR_INTERNAL_H_
rhughes@241
     3
krh@248
     4
#include <stdlib.h>
krh@248
     5
#include <stdint.h>
krh@248
     6
krh@248
     7
void *zalloc(size_t size);
krh@248
     8
krh@248
     9
struct array {
krh@248
    10
	void *data;
krh@248
    11
	int size, alloc;
krh@248
    12
};
krh@248
    13
krh@248
    14
void array_init(struct array *array);
krh@248
    15
void array_release(struct array *array);
krh@248
    16
void *array_add(struct array *array, int size);
krh@248
    17
krh@248
    18
krh@248
    19
struct list_head {
krh@248
    20
	uint32_t list_ptr : 24;
krh@248
    21
	uint32_t flags    : 8;
krh@248
    22
};
krh@248
    23
krh@248
    24
struct list {
krh@248
    25
	uint32_t data  : 24;
krh@248
    26
	uint32_t flags : 8;
krh@248
    27
};
krh@248
    28
krh@248
    29
void list_set_empty(struct list_head *head);
krh@248
    30
void list_set_ptr(struct list_head *head, uint32_t ptr);
krh@248
    31
void list_set_array(struct list_head *head, struct array *pool, struct array *items, int force_indirect);
krh@248
    32
krh@248
    33
struct list *list_first(struct list_head *head, struct array *pool);
krh@248
    34
struct list *list_next(struct list *list);
krh@248
    35
krh@248
    36
void list_remap_pool(struct array *pool, uint32_t *map);
krh@248
    37
void list_remap_head(struct list_head *list, uint32_t *map);
krh@248
    38
krh@248
    39
krh@248
    40
struct hashtable {
krh@248
    41
	struct array buckets;
krh@248
    42
	struct array *pool;
krh@248
    43
};
krh@248
    44
krh@248
    45
void hashtable_init(struct hashtable *table, struct array *pool);
krh@248
    46
void hashtable_release(struct hashtable *table);
krh@248
    47
uint32_t hashtable_insert(struct hashtable *table, const char *key);
krh@248
    48
uint32_t hashtable_lookup(struct hashtable *table, const char *key);
krh@248
    49
uint32_t hashtable_tokenize(struct hashtable *table, const char *string);
krh@248
    50
krh@248
    51
krh@248
    52
struct razor_set_section {
krh@248
    53
	uint32_t type;
krh@248
    54
	uint32_t offset;
krh@248
    55
	uint32_t size;
krh@248
    56
};
krh@248
    57
krh@248
    58
struct razor_set_header {
krh@248
    59
	uint32_t magic;
krh@248
    60
	uint32_t version;
krh@248
    61
	struct razor_set_section sections[0];
krh@248
    62
};
krh@248
    63
jbowes@258
    64
#define RAZOR_MAGIC 		0x7a7a7a7a
jbowes@258
    65
#define RAZOR_DETAILS_MAGIC 	0x7a7a7a7b
jbowes@258
    66
#define RAZOR_FILES_MAGIC 	0x7a7a7a7c
krh@248
    67
#define RAZOR_VERSION 1
krh@248
    68
jbowes@258
    69
#define RAZOR_STRING_POOL		0
jbowes@258
    70
#define RAZOR_PACKAGES			1
jbowes@258
    71
#define RAZOR_PROPERTIES		2
jbowes@258
    72
#define RAZOR_PACKAGE_POOL		3
jbowes@258
    73
#define RAZOR_PROPERTY_POOL		4
jbowes@258
    74
jbowes@258
    75
#define RAZOR_DETAILS_STRING_POOL	0
jbowes@258
    76
jbowes@258
    77
#define RAZOR_FILES			0
jbowes@258
    78
#define RAZOR_FILE_POOL			1
jbowes@258
    79
#define RAZOR_FILE_STRING_POOL		2
krh@248
    80
krh@248
    81
struct razor_package {
jbowes@258
    82
	uint name  : 24;
jbowes@258
    83
	uint flags : 8;
krh@248
    84
	uint32_t version;
krh@248
    85
	uint32_t arch;
jbowes@258
    86
	uint32_t summary;
jbowes@258
    87
	uint32_t description;
jbowes@258
    88
	uint32_t url;
jbowes@258
    89
	uint32_t license;
krh@248
    90
	struct list_head properties;
krh@248
    91
	struct list_head files;
krh@248
    92
};
krh@248
    93
jbowes@258
    94
krh@248
    95
struct razor_property {
krh@248
    96
	uint32_t name;
krh@248
    97
	uint32_t flags;
krh@248
    98
	uint32_t version;
krh@248
    99
	struct list_head packages;
krh@248
   100
};
krh@248
   101
krh@248
   102
struct razor_entry {
krh@248
   103
	uint32_t name  : 24;
krh@248
   104
	uint32_t flags : 8;
krh@248
   105
	uint32_t start;
krh@248
   106
	struct list_head packages;
krh@248
   107
};
krh@248
   108
krh@248
   109
#define RAZOR_ENTRY_LAST	0x80
krh@248
   110
krh@248
   111
struct razor_set {
krh@248
   112
	struct array string_pool;
krh@248
   113
 	struct array packages;
krh@248
   114
 	struct array properties;
krh@248
   115
 	struct array files;
krh@248
   116
	struct array package_pool;
krh@248
   117
 	struct array property_pool;
krh@248
   118
 	struct array file_pool;
jbowes@258
   119
	struct array file_string_pool;
jbowes@258
   120
	struct array details_string_pool;
krh@248
   121
	struct razor_set_header *header;
jbowes@258
   122
	struct razor_set_header *details_header;
jbowes@258
   123
	struct razor_set_header *files_header;
krh@248
   124
};
krh@248
   125
krh@248
   126
struct import_entry {
krh@248
   127
	uint32_t package;
krh@248
   128
	char *name;
krh@248
   129
};
krh@248
   130
krh@248
   131
struct import_directory {
krh@248
   132
	uint32_t name, count;
krh@248
   133
	struct array files;
krh@248
   134
	struct array packages;
krh@248
   135
	struct import_directory *last;
krh@248
   136
};
krh@248
   137
krh@248
   138
struct razor_importer {
krh@248
   139
	struct razor_set *set;
krh@248
   140
	struct hashtable table;
jbowes@258
   141
	struct hashtable file_table;
jbowes@258
   142
	struct hashtable details_table;
krh@248
   143
	struct razor_package *package;
krh@248
   144
	struct array properties;
krh@248
   145
	struct array files;
krh@248
   146
	struct array file_requires;
krh@248
   147
};
krh@248
   148
krh@248
   149
struct razor_package_iterator {
krh@248
   150
	struct razor_set *set;
krh@248
   151
	struct razor_package *package, *end;
krh@248
   152
	struct list *index;
krh@248
   153
	int free_index;
krh@248
   154
};
krh@248
   155
krh@248
   156
void
krh@248
   157
razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
krh@248
   158
					 struct razor_set *set,
krh@248
   159
					 struct razor_property *property);
krh@248
   160
krh@248
   161
struct razor_property_iterator {
krh@248
   162
	struct razor_set *set;
krh@248
   163
	struct razor_property *property, *end;
krh@248
   164
	struct list *index;
krh@248
   165
};
krh@248
   166
rhughes@241
   167
#define ALIGN(value, base) (((value) + (base - 1)) & ~((base) - 1))
rhughes@241
   168
krh@248
   169
struct razor_entry *
krh@248
   170
razor_set_find_entry(struct razor_set *set,
krh@248
   171
		     struct razor_entry *dir, const char *pattern);
krh@248
   172
krh@248
   173
struct razor_merger *
krh@248
   174
razor_merger_create(struct razor_set *set1, struct razor_set *set2);
krh@248
   175
void
krh@248
   176
razor_merger_add_package(struct razor_merger *merger,
krh@248
   177
			 struct razor_package *package);
krh@248
   178
struct razor_set *
krh@248
   179
razor_merger_finish(struct razor_merger *merger);
krh@248
   180
rhughes@241
   181
/* Utility functions */
rhughes@241
   182
rhughes@241
   183
int razor_create_dir(const char *root, const char *path);
rhughes@241
   184
int razor_write(int fd, const void *data, size_t size);
rhughes@241
   185
rhughes@241
   186
rhughes@241
   187
typedef int (*razor_compare_with_data_func_t)(const void *p1,
rhughes@241
   188
					      const void *p,
rhughes@241
   189
					      void *data);
rhughes@241
   190
uint32_t *
rhughes@241
   191
razor_qsort_with_data(void *base, size_t nelem, size_t size,
rhughes@241
   192
		      razor_compare_with_data_func_t compare, void *data);
rhughes@241
   193
rhughes@241
   194
#endif /* _RAZOR_INTERNAL_H_ */