diff -r f8c27fe9fe63 -r 6e93e5485947 librazor/razor.c --- a/librazor/razor.c Fri Jun 12 16:59:11 2009 +0100 +++ b/librazor/razor.c Fri Jul 03 18:02:33 2009 +0100 @@ -67,6 +67,7 @@ { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) }, { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) }, { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) }, + { RAZOR_PREFIX_POOL, offsetof(struct razor_set, prefix_pool) }, }; struct razor_set_section_index razor_files_sections[] = { @@ -377,9 +378,9 @@ } static const char * -razor_package_get_details_type(struct razor_set *set, - struct razor_package *package, - enum razor_detail_type type) +razor_package_get_details_string(struct razor_set *set, + struct razor_package *package, + enum razor_detail_type type) { const char *pool; @@ -434,6 +435,24 @@ } } +static const char *const * +razor_package_get_details_array(struct razor_set *set, + struct razor_package *package, + enum razor_detail_type type) +{ + switch (type) { + case RAZOR_DETAIL_PREFIXES: + /* We don't track prefixes in packages. Install prefixes + * are tracked, but we don't provide an API to get them. + */ + return NULL; + + default: + fprintf(stderr, "type %u not found\n", type); + return NULL; + } +} + /** * razor_package_get_details_varg: * @set: a %razor_set @@ -447,14 +466,22 @@ { int i; enum razor_detail_type type; - const char **data; + const char **string; + const char *const **array; for (i = 0;; i += 2) { type = va_arg(args, enum razor_detail_type); if (type == RAZOR_DETAIL_LAST) break; - data = va_arg(args, const char **); - *data = razor_package_get_details_type(set, package, type); + if (type == RAZOR_DETAIL_PREFIXES) { + array = va_arg(args, const char *const **); + *array = razor_package_get_details_array(set, package, + type); + } else { + string = va_arg(args, const char **); + *string = razor_package_get_details_string(set, package, + type); + } } } @@ -501,7 +528,10 @@ struct razor_package *p; char buffer[PATH_MAX]; const char *name, *program, *script; - int retval = 0, count; + int retval = 0, i, count; + struct environment env; + struct list *link; + const char *prefix; razor_package_get_details(set, package, RAZOR_DETAIL_PREUNPROG, &program, @@ -535,7 +565,22 @@ RAZOR_DETAIL_POSTUN, &script, RAZOR_DETAIL_LAST); - return razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, script); + environment_init(&env); + link = list_first(&package->install_prefixes, &set->prefix_pool); + for (i = 0; link; i++) { + prefix = (const char *)set->string_pool.data + link->data; + sprintf(buffer, "RPM_INSTALL_PREFIX%d", i); + environment_add_variable(&env, buffer, prefix); + link = list_next(link); + } + environment_set(&env); + + retval = razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, script); + + environment_unset(&env); + environment_release(&env); + + return retval; } RAZOR_EXPORT const char *