1.1 --- a/librazor/razor.c Fri Jun 12 16:59:11 2009 +0100
1.2 +++ b/librazor/razor.c Fri Jul 03 18:02:33 2009 +0100
1.3 @@ -67,6 +67,7 @@
1.4 { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) },
1.5 { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) },
1.6 { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) },
1.7 + { RAZOR_PREFIX_POOL, offsetof(struct razor_set, prefix_pool) },
1.8 };
1.9
1.10 struct razor_set_section_index razor_files_sections[] = {
1.11 @@ -377,9 +378,9 @@
1.12 }
1.13
1.14 static const char *
1.15 -razor_package_get_details_type(struct razor_set *set,
1.16 - struct razor_package *package,
1.17 - enum razor_detail_type type)
1.18 +razor_package_get_details_string(struct razor_set *set,
1.19 + struct razor_package *package,
1.20 + enum razor_detail_type type)
1.21 {
1.22 const char *pool;
1.23
1.24 @@ -434,6 +435,24 @@
1.25 }
1.26 }
1.27
1.28 +static const char *const *
1.29 +razor_package_get_details_array(struct razor_set *set,
1.30 + struct razor_package *package,
1.31 + enum razor_detail_type type)
1.32 +{
1.33 + switch (type) {
1.34 + case RAZOR_DETAIL_PREFIXES:
1.35 + /* We don't track prefixes in packages. Install prefixes
1.36 + * are tracked, but we don't provide an API to get them.
1.37 + */
1.38 + return NULL;
1.39 +
1.40 + default:
1.41 + fprintf(stderr, "type %u not found\n", type);
1.42 + return NULL;
1.43 + }
1.44 +}
1.45 +
1.46 /**
1.47 * razor_package_get_details_varg:
1.48 * @set: a %razor_set
1.49 @@ -447,14 +466,22 @@
1.50 {
1.51 int i;
1.52 enum razor_detail_type type;
1.53 - const char **data;
1.54 + const char **string;
1.55 + const char *const **array;
1.56
1.57 for (i = 0;; i += 2) {
1.58 type = va_arg(args, enum razor_detail_type);
1.59 if (type == RAZOR_DETAIL_LAST)
1.60 break;
1.61 - data = va_arg(args, const char **);
1.62 - *data = razor_package_get_details_type(set, package, type);
1.63 + if (type == RAZOR_DETAIL_PREFIXES) {
1.64 + array = va_arg(args, const char *const **);
1.65 + *array = razor_package_get_details_array(set, package,
1.66 + type);
1.67 + } else {
1.68 + string = va_arg(args, const char **);
1.69 + *string = razor_package_get_details_string(set, package,
1.70 + type);
1.71 + }
1.72 }
1.73
1.74 }
1.75 @@ -501,7 +528,10 @@
1.76 struct razor_package *p;
1.77 char buffer[PATH_MAX];
1.78 const char *name, *program, *script;
1.79 - int retval = 0, count;
1.80 + int retval = 0, i, count;
1.81 + struct environment env;
1.82 + struct list *link;
1.83 + const char *prefix;
1.84
1.85 razor_package_get_details(set, package,
1.86 RAZOR_DETAIL_PREUNPROG, &program,
1.87 @@ -535,7 +565,22 @@
1.88 RAZOR_DETAIL_POSTUN, &script,
1.89 RAZOR_DETAIL_LAST);
1.90
1.91 - return razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, script);
1.92 + environment_init(&env);
1.93 + link = list_first(&package->install_prefixes, &set->prefix_pool);
1.94 + for (i = 0; link; i++) {
1.95 + prefix = (const char *)set->string_pool.data + link->data;
1.96 + sprintf(buffer, "RPM_INSTALL_PREFIX%d", i);
1.97 + environment_add_variable(&env, buffer, prefix);
1.98 + link = list_next(link);
1.99 + }
1.100 + environment_set(&env);
1.101 +
1.102 + retval = razor_run_script(root, RAZOR_PROPERTY_POSTUN, program, script);
1.103 +
1.104 + environment_unset(&env);
1.105 + environment_release(&env);
1.106 +
1.107 + return retval;
1.108 }
1.109
1.110 RAZOR_EXPORT const char *