From: Michael Tremer Date: Tue, 19 Jan 2021 20:27:19 +0000 (+0000) Subject: libpakfire: Define and always create private dir X-Git-Tag: 0.9.28~1285^2~840 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ad608aa600178d4ba7eb53ac3c9bab43806a17e;p=pakfire.git libpakfire: Define and always create private dir Signed-off-by: Michael Tremer --- diff --git a/configure.ac b/configure.ac index bef8cbbcd..e58b78ad5 100644 --- a/configure.ac +++ b/configure.ac @@ -186,6 +186,9 @@ AC_ARG_WITH([systemdsystemunitdir], AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir"]) +AC_DEFINE_UNQUOTED([PAKFIRE_PRIVATE_DIR], ["/var/lib/${PACKAGE_NAME}"], + [The path where Pakfire stores its private data]) + AC_CONFIG_FILES([ Makefile po/Makefile.in diff --git a/src/libpakfire/include/pakfire/pakfire.h b/src/libpakfire/include/pakfire/pakfire.h index a975a73ba..a8d17931a 100644 --- a/src/libpakfire/include/pakfire/pakfire.h +++ b/src/libpakfire/include/pakfire/pakfire.h @@ -34,6 +34,7 @@ Pakfire pakfire_ref(Pakfire pakfire); Pakfire pakfire_unref(Pakfire pakfire); const char* pakfire_get_path(Pakfire pakfire); +char* pakfire_make_path(Pakfire pakfire, const char* path); const char* pakfire_get_arch(Pakfire pakfire); const char** pakfire_get_installonly(Pakfire pakfire); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 3331d3e50..2398ad078 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -34,6 +34,7 @@ global: pakfire_get_path; pakfire_get_pool; pakfire_get_repo; + pakfire_make_path; pakfire_ref; pakfire_search; pakfire_set_cache_path; diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index d15837218..6ce262f4e 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -114,6 +114,8 @@ static void _pakfire_free(Pakfire pakfire) { } PAKFIRE_EXPORT int pakfire_create(Pakfire* pakfire, const char* path, const char* arch) { + int r; + // Default to the native architecture if (!arch) arch = pakfire_arch_native(); @@ -155,8 +157,20 @@ PAKFIRE_EXPORT int pakfire_create(Pakfire* pakfire, const char* path, const char DEBUG(p, " arch = %s\n", pakfire_get_arch(p)); DEBUG(p, " path = %s\n", pakfire_get_path(p)); + // Make sure that our private directory exists + char* private_dir = pakfire_make_path(p, PAKFIRE_PRIVATE_DIR); + r = pakfire_mkdir(p, private_dir, 0); + if (r) { + ERROR(p, "Could not create private directory %s: %s\n", + private_dir, strerror(errno)); + free(private_dir); + + _pakfire_free(p); + return r; + } + // Initialise the database environment - int r = pakfire_db_env_init(p, &p->mdb_env); + r = pakfire_db_env_init(p, &p->mdb_env); if (r) { _pakfire_free(p); @@ -201,6 +215,14 @@ PAKFIRE_EXPORT const char* pakfire_get_path(Pakfire pakfire) { return pakfire->path; } +PAKFIRE_EXPORT char* pakfire_make_path(Pakfire pakfire, const char* path) { + // Make sure that path never starts with / + if (path && path[0] == '/') + path++; + + return pakfire_path_join(pakfire->path, path); +} + PAKFIRE_EXPORT const char* pakfire_get_arch(Pakfire pakfire) { return pakfire->arch; }