krh@27: #ifndef _RAZOR_H_ krh@27: #define _RAZOR_H_ krh@27: krh@27: #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) krh@27: krh@27: struct array { krh@27: void *data; krh@27: int size, alloc; krh@27: }; krh@27: krh@27: struct razor_set_section { krh@27: unsigned int type; krh@27: unsigned int offset; krh@27: unsigned int size; krh@27: }; krh@27: krh@27: struct razor_set_header { krh@27: unsigned int magic; krh@27: unsigned int version; krh@27: struct razor_set_section sections[0]; krh@27: }; krh@27: krh@27: #define RAZOR_MAGIC 0x7a7a7a7a krh@27: #define RAZOR_VERSION 1 krh@27: krh@27: #define RAZOR_PACKAGES 0 krh@27: #define RAZOR_REQUIRES 1 krh@27: #define RAZOR_PROVIDES 2 krh@27: #define RAZOR_STRING_POOL 3 krh@27: #define RAZOR_PROPERTY_POOL 4 krh@27: krh@27: struct razor_package { krh@27: unsigned long name; krh@27: unsigned long version; krh@27: unsigned long requires; krh@27: unsigned long provides; krh@27: }; krh@27: krh@27: struct razor_property { krh@27: unsigned long name; krh@27: unsigned long version; krh@27: unsigned long packages; krh@27: }; krh@27: krh@27: struct razor_set { krh@27: struct array buckets; krh@27: struct array string_pool; krh@27: struct array property_pool; krh@27: struct array packages; krh@27: struct array requires; krh@27: struct array provides; krh@27: struct razor_set_header *header; krh@27: }; krh@27: krh@27: struct import_property_context { krh@27: struct array *all; krh@27: struct array package; krh@27: }; krh@27: krh@27: struct import_context { krh@27: struct razor_set *set; krh@27: struct import_property_context requires; krh@27: struct import_property_context provides; krh@27: struct razor_package *package; krh@27: unsigned long *requires_map; krh@27: unsigned long *provides_map; krh@27: }; krh@27: krh@27: void import_context_add_package(struct import_context *ctx, krh@27: const char *name, const char *version); krh@27: void import_context_add_property(struct import_context *ctx, krh@27: struct import_property_context *pctx, krh@27: const char *name, const char *version); krh@27: void import_context_finish_package(struct import_context *ctx); krh@27: krh@27: unsigned long razor_set_tokenize(struct razor_set *set, const char *string); krh@27: void razor_prepare_import(struct import_context *ctx); krh@27: struct razor_set *razor_finish_import(struct import_context *ctx); krh@27: krh@27: struct razor_set *razor_import_rzr_files(int count, const char **files); krh@27: struct razor_set *razor_set_create_from_yum_filelist(int fd); krh@28: struct razor_set *razor_set_create_from_rpmdb(void); krh@27: krh@27: #endif /* _RAZOR_H_ */