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