};
struct pakfire_config {
+ int nrefs;
+
STAILQ_HEAD(entries, pakfire_config_entry) entries;
};
free(entry);
}
-void pakfire_config_free(struct pakfire_config* config) {
+static void pakfire_config_free(struct pakfire_config* config) {
while (!STAILQ_EMPTY(&config->entries)) {
struct pakfire_config_entry* entry = STAILQ_FIRST(&config->entries);
STAILQ_REMOVE_HEAD(&config->entries, nodes);
free(config);
}
+struct pakfire_config* pakfire_config_ref(struct pakfire_config* config) {
+ config->nrefs++;
+
+ return config;
+}
+
+struct pakfire_config* pakfire_config_unref(struct pakfire_config* config) {
+ if (--config->nrefs > 0)
+ return config;
+
+ pakfire_config_free(config);
+ return NULL;
+}
+
static struct pakfire_config_entry* pakfire_config_create_entry(
struct pakfire_config* config, const char* section, const char* key) {
struct pakfire_config_entry* entry = calloc(1, sizeof(*entry));
struct pakfire_config;
int pakfire_config_create(struct pakfire_config** config);
-void pakfire_config_free(struct pakfire_config* config);
+struct pakfire_config* pakfire_config_ref(struct pakfire_config* config);
+struct pakfire_config* pakfire_config_unref(struct pakfire_config* config);
int pakfire_config_set(struct pakfire_config* config,
const char* section, const char* key, const char* value);
#include <solv/pool.h>
+#include <pakfire/config.h>
+
+struct pakfire_config* pakfire_get_config(Pakfire pakfire);
+
#define pakfire_make_path(pakfire, dst, path) \
__pakfire_make_path(pakfire, dst, sizeof(dst) - 1, path)
int __pakfire_make_path(Pakfire pakfire, char* dst, size_t length, const char* path);
queue_free(&pakfire->installonly);
if (pakfire->config)
- pakfire_config_free(pakfire->config);
+ pakfire_config_unref(pakfire->config);
free(pakfire);
}
return NULL;
}
+struct pakfire_config* pakfire_get_config(Pakfire pakfire) {
+ if (pakfire->config)
+ return pakfire_config_ref(pakfire->config);
+
+ return NULL;
+}
+
PAKFIRE_EXPORT const char* pakfire_get_path(Pakfire pakfire) {
return pakfire->path;
}