Both the osinfo-db-import and osinfo-db-export tools have the same code for getting the database path locations. Pull it out into a osinfo-db-util.c file for sharing. Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- tools/Makefile.am | 9 +++- tools/osinfo-db-export.c | 80 ++-------------------------------- tools/osinfo-db-import.c | 80 ++-------------------------------- tools/osinfo-db-util.c | 110 +++++++++++++++++++++++++++++++++++++++++++++++ tools/osinfo-db-util.h | 48 +++++++++++++++++++++ 5 files changed, 171 insertions(+), 156 deletions(-) create mode 100644 tools/osinfo-db-util.c create mode 100644 tools/osinfo-db-util.h diff --git a/tools/Makefile.am b/tools/Makefile.am index 701fbe4..37f9abb 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -21,19 +21,24 @@ POD2MAN = pod2man -c "Virtualization Support" -r "$(PACKAGE)-$(VERSION)" %.1: %.c Makefile $(AM_V_GEN)$(POD2MAN) $< $@ +COMMON_SOURCES = \ + osinfo-db-util.c \ + osinfo-db-util.h \ + $(NULL) + osinfo_db_validate_SOURCES = osinfo-db-validate.c osinfo_db_validate_LDADD = $(GOBJECT_LIBS) \ $(GIO_LIBS) \ $(GLIB_LIBS) \ $(LIBXML_LIBS) -osinfo_db_import_SOURCES = osinfo-db-import.c +osinfo_db_import_SOURCES = osinfo-db-import.c $(COMMON_SOURCES) osinfo_db_import_LDADD = $(GOBJECT_LIBS) \ $(GIO_LIBS) \ $(GLIB_LIBS) \ $(LIBARCHIVE_LIBS) -osinfo_db_export_SOURCES = osinfo-db-export.c +osinfo_db_export_SOURCES = osinfo-db-export.c $(COMMON_SOURCES) osinfo_db_export_LDADD = $(GOBJECT_LIBS) \ $(GIO_LIBS) \ $(GLIB_LIBS) \ diff --git a/tools/osinfo-db-export.c b/tools/osinfo-db-export.c index ea68645..256c793 100644 --- a/tools/osinfo-db-export.c +++ b/tools/osinfo-db-export.c @@ -23,89 +23,15 @@ #include <config.h> -#include <glib.h> -#include <gio/gio.h> #include <locale.h> #include <glib/gi18n.h> #include <stdlib.h> #include <archive.h> #include <archive_entry.h> -const char *argv0; - -static GFile *osinfo_db_export_get_system_path(const gchar *root) -{ - GFile *file; - gchar *dbdir; - const gchar *path = g_getenv("OSINFO_DATA_DIR"); - if (!path) - path = DATA_DIR "/libosinfo"; - - dbdir = g_strdup_printf("%s%s/db", root, path); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - -static GFile *osinfo_db_export_get_local_path(const gchar *root) -{ - GFile *file; - gchar *dbdir; - - dbdir = g_strdup_printf("%s" SYSCONFDIR "/libosinfo/db", root); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - -static GFile *osinfo_db_export_get_user_path(const gchar *root) -{ - GFile *file; - gchar *dbdir; - const gchar *configdir = g_get_user_config_dir(); - - dbdir = g_strdup_printf("%s%s/libosinfo/db", root, configdir); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} +#include "osinfo-db-util.h" - -static GFile *osinfo_db_export_get_custom_path(const gchar *dir, - const gchar *root) -{ - GFile *file; - gchar *dbdir; - - dbdir = g_strdup_printf("%s%s", root, dir); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - - -static GFile *osinfo_db_export_get_path(const char *root, - gboolean user, - gboolean local, - gboolean system, - const char *custom) -{ - if (custom) { - return osinfo_db_export_get_custom_path(custom, root); - } else if (user) { - return osinfo_db_export_get_user_path(root); - } else if (local) { - return osinfo_db_export_get_local_path(root); - } else if (system) { - return osinfo_db_export_get_system_path(root); -#ifndef WIN32 - } else if (geteuid() == 0) { - return osinfo_db_export_get_local_path(root); -#endif - } else { - return osinfo_db_export_get_user_path(root); - } -} +const char *argv0; static int osinfo_db_export_create_file(const gchar *prefix, @@ -481,7 +407,7 @@ gint main(gint argc, gchar **argv) prefix = osinfo_db_export_prefix(version); archive = argc == 2 ? argv[1] : NULL; - dir = osinfo_db_export_get_path(root, user, local, system, custom); + dir = osinfo_db_get_path(root, user, local, system, custom); if (osinfo_db_export_create(prefix, dir, archive, verbose) < 0) goto error; diff --git a/tools/osinfo-db-import.c b/tools/osinfo-db-import.c index 327562a..b621d2b 100644 --- a/tools/osinfo-db-import.c +++ b/tools/osinfo-db-import.c @@ -23,89 +23,15 @@ #include <config.h> -#include <glib.h> -#include <gio/gio.h> #include <locale.h> #include <glib/gi18n.h> #include <stdlib.h> #include <archive.h> #include <archive_entry.h> -const char *argv0; - -static GFile *osinfo_db_import_get_system_path(const gchar *root) -{ - GFile *file; - gchar *dbdir; - const gchar *path = g_getenv("OSINFO_DATA_DIR"); - if (!path) - path = DATA_DIR "/libosinfo"; - - dbdir = g_strdup_printf("%s%s/db", root, path); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - -static GFile *osinfo_db_import_get_local_path(const gchar *root) -{ - GFile *file; - gchar *dbdir; - - dbdir = g_strdup_printf("%s" SYSCONFDIR "/libosinfo/db", root); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - -static GFile *osinfo_db_import_get_user_path(const gchar *root) -{ - GFile *file; - gchar *dbdir; - const gchar *configdir = g_get_user_config_dir(); - - dbdir = g_strdup_printf("%s%s/libosinfo/db", root, configdir); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - -static GFile *osinfo_db_import_get_custom_path(const gchar *dir, - const gchar *root) -{ - GFile *file; - gchar *dbdir; - - dbdir = g_strdup_printf("%s%s", root, dir); - file = g_file_new_for_path(dbdir); - g_free(dbdir); - return file; -} - - -static GFile *osinfo_db_import_get_path(const char *root, - gboolean user, - gboolean local, - gboolean system, - const char *custom) -{ - if (custom) { - return osinfo_db_import_get_custom_path(custom, root); - } else if (user) { - return osinfo_db_import_get_user_path(root); - } else if (local) { - return osinfo_db_import_get_local_path(root); - } else if (system) { - return osinfo_db_import_get_system_path(root); -#ifndef WIN32 - } else if (geteuid() == 0) { - return osinfo_db_import_get_local_path(root); -#endif - } else { - return osinfo_db_import_get_user_path(root); - } -} +#include "osinfo-db-util.h" +const char *argv0; static int osinfo_db_import_create_reg(GFile *file, struct archive *arc, @@ -335,7 +261,7 @@ gint main(gint argc, gchar **argv) } archive = argc == 2 ? argv[1] : NULL; - dir = osinfo_db_import_get_path(root, user, local, system, custom); + dir = osinfo_db_get_path(root, user, local, system, custom); if (osinfo_db_import_extract(dir, archive, verbose) < 0) goto error; diff --git a/tools/osinfo-db-util.c b/tools/osinfo-db-util.c new file mode 100644 index 0000000..1d81d0c --- /dev/null +++ b/tools/osinfo-db-util.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2016 Red Hat, Inc. + * + * osinfo-db-util: misc helper APIs + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Authors: + * Daniel P. Berrange <berrange@xxxxxxxxxx> + */ + +#include <config.h> + +#include "osinfo-db-util.h" + +GFile *osinfo_db_get_system_path(const gchar *root) +{ + GFile *file; + gchar *dbdir; + const gchar *path = g_getenv("OSINFO_DATA_DIR"); + if (!path) + path = DATA_DIR "/libosinfo"; + + dbdir = g_strdup_printf("%s%s/db", root, path); + file = g_file_new_for_path(dbdir); + g_free(dbdir); + return file; +} + + +GFile *osinfo_db_get_local_path(const gchar *root) +{ + GFile *file; + gchar *dbdir; + + dbdir = g_strdup_printf("%s" SYSCONFDIR "/libosinfo/db", root); + file = g_file_new_for_path(dbdir); + g_free(dbdir); + return file; +} + + +GFile *osinfo_db_get_user_path(const gchar *root) +{ + GFile *file; + gchar *dbdir; + const gchar *configdir = g_get_user_config_dir(); + + dbdir = g_strdup_printf("%s%s/libosinfo/db", root, configdir); + file = g_file_new_for_path(dbdir); + g_free(dbdir); + return file; +} + + +GFile *osinfo_db_get_custom_path(const gchar *dir, + const gchar *root) +{ + GFile *file; + gchar *dbdir; + + dbdir = g_strdup_printf("%s%s", root, dir); + file = g_file_new_for_path(dbdir); + g_free(dbdir); + return file; +} + + +GFile *osinfo_db_get_path(const char *root, + gboolean user, + gboolean local, + gboolean system, + const char *custom) +{ + if (custom) { + return osinfo_db_get_custom_path(custom, root); + } else if (user) { + return osinfo_db_get_user_path(root); + } else if (local) { + return osinfo_db_get_local_path(root); + } else if (system) { + return osinfo_db_get_system_path(root); +#ifndef WIN32 + } else if (geteuid() == 0) { + return osinfo_db_get_local_path(root); +#endif + } else { + return osinfo_db_get_user_path(root); + } +} + +/* + * Local variables: + * indent-tabs-mode: nil + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/tools/osinfo-db-util.h b/tools/osinfo-db-util.h new file mode 100644 index 0000000..acfcde6 --- /dev/null +++ b/tools/osinfo-db-util.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 Red Hat, Inc. + * + * osinfo-db-util: misc helper APIs + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Authors: + * Daniel P. Berrange <berrange@xxxxxxxxxx> + */ + +#ifndef OSINFO_DB_UTIL_H__ +#define OSINFO_DB_UTIL_H__ + +#include <gio/gio.h> + +GFile *osinfo_db_get_system_path(const gchar *root); +GFile *osinfo_db_get_local_path(const gchar *root); +GFile *osinfo_db_get_user_path(const gchar *root); +GFile *osinfo_db_get_custom_path(const gchar *dir, + const gchar *root); +GFile *osinfo_db_get_path(const char *root, + gboolean user, + gboolean local, + gboolean system, + const char *custom); + +#endif /* OSINFO_DB_UTIL_H__ */ + +/* + * Local variables: + * indent-tabs-mode: nil + * c-indent-level: 4 + * c-basic-offset: 4 + * End: + */ -- 2.7.4 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo