const enum pakfire_package_key key, const char* value);
// String Arrays
-const char** pakfire_package_get_strings(struct pakfire_package* pkg,
+char** pakfire_package_get_strings(struct pakfire_package* pkg,
const enum pakfire_package_key key);
int pakfire_package_set_strings(struct pakfire_package* pkg,
const enum pakfire_package_key key, const char** values);
int pakfire_json_add_integer(struct pakfire* pakfire,
struct json_object* json, const char* name, int value);
int pakfire_json_add_string_array(struct pakfire* pakfire,
- struct json_object* json, const char* name, const char** array);
+ struct json_object* json, const char* name, char** array);
// Resource Limits
solvable_unset(s, id);
}
-PAKFIRE_EXPORT const char** pakfire_package_get_strings(
+PAKFIRE_EXPORT char** pakfire_package_get_strings(
struct pakfire_package* pkg, const enum pakfire_package_key key) {
- const char** ret = NULL;
+ char** ret = NULL;
+ const char* str = NULL;
Queue strings;
Id id = ID_NULL;
goto ERROR;
// Fetch the strings
- for (int i = 0; i < strings.count; i++)
- ret[i] = pool_id2str(pool, strings.elements[i]);
+ for (int i = 0; i < strings.count; i++) {
+ str = pool_id2str(pool, strings.elements[i]);
+ if (!str)
+ goto ERROR;
+
+ // Copy string to heap
+ ret[i] = strdup(str);
+ }
}
ERROR:
pakfire_package_dump_add_line(&string, _("Build ID"), build_id);
// Build Arches
- const char** build_arches = pakfire_package_get_strings(pkg, PAKFIRE_PKG_BUILD_ARCHES);
+ char** build_arches = pakfire_package_get_strings(pkg, PAKFIRE_PKG_BUILD_ARCHES);
if (build_arches) {
- for (const char** build_arch = build_arches; *build_arch; build_arch++)
+ for (char** build_arch = build_arches; *build_arch; build_arch++) {
pakfire_package_dump_add_line(&string, _("Build Arch"), *build_arch);
+ free(*build_arch);
+ }
free(build_arches);
}
return 1;
// Add dependencies
- int r = pakfire_json_add_string_array(pkg->pakfire, json,
- name, (const char**)dependencies);
+ int r = pakfire_json_add_string_array(pkg->pakfire, json, name, dependencies);
if (r)
goto ERROR;
}
// Write build arches
- const char** build_arches = pakfire_package_get_strings(pkg, PAKFIRE_PKG_BUILD_ARCHES);
+ char** build_arches = pakfire_package_get_strings(pkg, PAKFIRE_PKG_BUILD_ARCHES);
if (build_arches) {
r = pakfire_json_add_string_array(pkg->pakfire, object, "arches", build_arches);
+
+ // Cleanup
+ for (char** build_arch = build_arches; *build_arch; build_arch++)
+ free(*build_arch);
free(build_arches);
if (r)
}
int pakfire_json_add_string_array(struct pakfire* pakfire, struct json_object* json,
- const char* name, const char** array) {
+ const char* name, char** array) {
int r = 1;
// Allocate a new array
goto ERROR;
// Add all items on list to the array
- for (const char** item = array; *item; item++) {
+ for (char** item = array; *item; item++) {
r = json_object_array_add(object, json_object_new_string(*item));
if (r)
goto ERROR;