librazor/razor-internal.h
author J. Ali Harlow <ali@juiblex.co.uk>
Fri Jul 03 18:02:33 2009 +0100 (2009-07-03)
changeset 372 6e93e5485947
parent 369 f8c27fe9fe63
child 373 fda83d91e600
permissions -rw-r--r--
Support RPM_INSTALL_PREFIX{n} during uninstall
     1 /*
     2  * Copyright (C) 2008  Kristian Høgsberg <krh@redhat.com>
     3  * Copyright (C) 2008  Red Hat, Inc
     4  * Copyright (C) 2009  J. Ali Harlow <ali@juiblex.co.uk>
     5  *
     6  * This program is free software; you can redistribute it and/or modify
     7  * it under the terms of the GNU General Public License as published by
     8  * the Free Software Foundation; either version 2 of the License, or
     9  * (at your option) any later version.
    10  *
    11  * This program is distributed in the hope that it will be useful,
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14  * GNU General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU General Public License along
    17  * with this program; if not, write to the Free Software Foundation, Inc.,
    18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    19  */
    20 
    21 #ifndef _RAZOR_INTERNAL_H_
    22 #define _RAZOR_INTERNAL_H_
    23 
    24 #include <stdlib.h>
    25 #include <stdint.h>
    26 #include <stdarg.h>
    27 #include <unistd.h>
    28 
    29 #include "razor.h"
    30 #include "types/types.h"
    31 
    32 /* GCC visibility */
    33 #if defined(__GNUC__) && __GNUC__ >= 4
    34 #define RAZOR_EXPORT __attribute__ ((visibility("default")))
    35 #else
    36 #define RAZOR_EXPORT
    37 #endif
    38 
    39 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
    40 #define ALIGN(value, base) (((value) + (base - 1)) & ~((base) - 1))
    41 
    42 void *zalloc(size_t size);
    43 
    44 struct razor_set_section {
    45 	uint32_t name;
    46 	uint32_t offset;
    47 	uint32_t size;
    48 };
    49 
    50 struct razor_set_header {
    51 	uint32_t magic;
    52 	uint32_t version;
    53 	uint32_t num_sections;
    54 };
    55 
    56 #define RAZOR_MAGIC 	0x525a4442
    57 #define RAZOR_VERSION	1
    58 
    59 #define RAZOR_STRING_POOL		"string_pool"
    60 #define RAZOR_PACKAGES			"packages"
    61 #define RAZOR_PROPERTIES		"properties"
    62 #define RAZOR_PACKAGE_POOL		"package_pool"
    63 #define RAZOR_PROPERTY_POOL		"property_pool"
    64 #define RAZOR_PREFIX_POOL		"prefix_pool"
    65 
    66 #define RAZOR_DETAILS_STRING_POOL	"details_string_pool"
    67 
    68 #define RAZOR_FILES			"files"
    69 #define RAZOR_FILE_POOL			"file_pool"
    70 #define RAZOR_FILE_STRING_POOL		"file_string_pool"
    71 
    72 struct razor_script {
    73 	uint32_t program;
    74 	uint32_t body;
    75 };
    76 
    77 struct razor_package {
    78 	unsigned int name  : 24;
    79 	unsigned int flags : 8;
    80 	uint32_t version;
    81 	uint32_t arch;
    82 	uint32_t summary;
    83 	uint32_t description;
    84 	uint32_t url;
    85 	uint32_t license;
    86 	struct list_head properties;
    87 	struct list_head files;
    88 	struct list_head install_prefixes;
    89 	struct razor_script preun;
    90 	struct razor_script postun;
    91 };
    92 
    93 
    94 struct razor_property {
    95 	uint32_t name;
    96 	uint32_t flags;
    97 	uint32_t version;
    98 	struct list_head packages;
    99 };
   100 
   101 struct razor_entry {
   102 	uint32_t name  : 24;
   103 	uint32_t flags : 8;
   104 	uint32_t start;
   105 	struct list_head packages;
   106 };
   107 
   108 #define RAZOR_ENTRY_LAST	0x80
   109 
   110 struct razor_set {
   111 	struct array string_pool;
   112  	struct array packages;
   113  	struct array properties;
   114  	struct array files;
   115 	struct array package_pool;
   116  	struct array property_pool;
   117  	struct array file_pool;
   118  	struct array prefix_pool;
   119 	struct array file_string_pool;
   120 	struct array details_string_pool;
   121 
   122 	struct razor_set_header *header;
   123 	size_t header_size;
   124 
   125 	struct razor_set_header *details_header;
   126 	size_t details_header_size;
   127 
   128 	struct razor_set_header *files_header;
   129 	size_t files_header_size;
   130 };
   131 
   132 struct import_entry {
   133 	uint32_t package;
   134 	char *name;
   135 };
   136 
   137 struct import_directory {
   138 	uint32_t name, count;
   139 	struct array files;
   140 	struct array packages;
   141 	struct import_directory *last;
   142 };
   143 
   144 struct razor_importer {
   145 	struct razor_set *set;
   146 	struct hashtable table;
   147 	struct hashtable file_table;
   148 	struct hashtable details_table;
   149 	struct razor_package *package;
   150 	struct array properties;
   151 	struct array files;
   152 	struct array file_requires;
   153 	struct array install_prefixes;
   154 };
   155 
   156 struct razor_package_iterator {
   157 	struct razor_set *set;
   158 	struct razor_package *package, *end;
   159 	struct list *index;
   160 	int free_index;
   161 };
   162 
   163 void
   164 razor_package_iterator_init_for_property(struct razor_package_iterator *pi,
   165 					 struct razor_set *set,
   166 					 struct razor_property *property);
   167 
   168 struct razor_property_iterator {
   169 	struct razor_set *set;
   170 	struct razor_property *property, *end;
   171 	struct list *index;
   172 };
   173 
   174 struct razor_file_iterator {
   175 	struct razor_set *set;
   176 	struct array path;
   177 	struct list *index;
   178 };
   179 
   180 struct razor_entry *
   181 razor_set_find_entry(struct razor_set *set,
   182 		     struct razor_entry *dir, const char *pattern);
   183 
   184 struct razor_merger *
   185 razor_merger_create(struct razor_set *set1, struct razor_set *set2);
   186 void
   187 razor_merger_add_package(struct razor_merger *merger,
   188 			 struct razor_package *package);
   189 struct razor_set *
   190 razor_merger_commit(struct razor_merger *merger);
   191 void
   192 razor_merger_package_add_script(struct razor_merger *merger,
   193 				struct razor_package *package,
   194 				enum razor_property_flags script,
   195 				const char *program, const char *body);
   196 void
   197 razor_merger_destroy(struct razor_merger *merger);
   198 
   199 int run_lua_script(const char *root, const char *name, const char *body,
   200 		   ssize_t len);
   201 
   202 int razor_run_script(const char *root, enum razor_property_flags script,
   203 		     const char *program, const char *body);
   204 
   205 /* Utility functions */
   206 
   207 void
   208 razor_package_get_details_varg(struct razor_set *set,
   209 			       struct razor_package *package,
   210 			       va_list args);
   211 void razor_rpm_get_details_varg(struct razor_rpm *rpm, va_list args);
   212 
   213 int razor_create_dir(const char *root, const char *path);
   214 int razor_write(int fd, const void *data, size_t size);
   215 
   216 void *razor_file_get_contents(const char *filename, size_t *length);
   217 int razor_file_free_contents(void *addr, size_t length);
   218 
   219 
   220 typedef int (*razor_compare_with_data_func_t)(const void *p1,
   221 					      const void *p,
   222 					      void *data);
   223 uint32_t *
   224 razor_qsort_with_data(void *base, size_t nelem, size_t size,
   225 		      razor_compare_with_data_func_t compare, void *data);
   226 
   227 struct environment {
   228 	int is_set;
   229 	struct array vars, string_pool;
   230 };
   231 
   232 void environment_init(struct environment *env);
   233 void environment_add_variable(struct environment *env,
   234 			      const char *variable, const char *value);
   235 void environment_set(struct environment *env);
   236 void environment_unset(struct environment *env);
   237 void environment_release(struct environment *env);
   238 
   239 #endif /* _RAZOR_INTERNAL_H_ */