The new database locations are - System location This is determined by the env variable $OSINFO_SYSTEM_DIR If not set, then defaults to /usr/share/osinfo This location is intended for use by operating system distributors to install the initial data set via a package management system like RPM or Deb - Local location This is determined by the env variable $OSINFO_LOCAL_DIR If not set, then defaults to /etc/osinfo This location is intended for use by local system administrators to install custom local data that should be available to all users on a host - User location This is determined by the env variable $OSINFO_USER_DIR If not set, then defaults to $XDG_CONFIG_HOME/osinfo If that is not set, then defaults to $HOME/.config/osinfo This location is intended for use by unprivileged users wishing to install local data for use by their applications Adapt to use those, but include temporary support for looking at the legacy local & user directory locations, and the OSINFO_DATA_DIR env variable for back-compat. Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> --- osinfo/Makefile.am | 1 + osinfo/osinfo_loader.c | 84 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 73 insertions(+), 12 deletions(-) diff --git a/osinfo/Makefile.am b/osinfo/Makefile.am index ddece61..c915b57 100644 --- a/osinfo/Makefile.am +++ b/osinfo/Makefile.am @@ -36,6 +36,7 @@ libosinfo_1_0_la_CFLAGS = \ $(GOBJECT_CFLAGS) \ $(GLIB_CFLAGS) \ $(GIO_CFLAGS) \ + -DDATA_DIR='"$(datadir)"' \ -DPKG_DATA_DIR='"$(pkgdatadir)"' \ -DSYS_CONF_DIR='"$(sysconfdir)"' \ -DLOCALEDIR="\"$(datadir)/locale\"" \ diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c index 73843cf..33ff174 100644 --- a/osinfo/osinfo_loader.c +++ b/osinfo/osinfo_loader.c @@ -2280,23 +2280,61 @@ static GFile *osinfo_loader_get_usb_path(void) static GFile *osinfo_loader_get_system_path(void) { GFile *file; - gchar *dbdir; - const gchar *path = g_getenv("OSINFO_DATA_DIR"); - if (!path) - path = PKG_DATA_DIR; + const gchar *path; + + path = g_getenv("OSINFO_DATA_DIR"); + if (path) { + char *dbpath; + static gboolean warned = FALSE; + if (!warned) { + g_printerr("$OSINFO_DATA_DIR is deprecated, please " + "use $OSINFO_SYSTEM_DIR intead. Support " + "for $OSINFO_DATA_DIR will be removed " + "in a future release"); + warned = TRUE; + } + + dbpath = g_strdup_printf("%s/db", path); + file = g_file_new_for_path(path); + g_free(dbpath); + } else { + path = g_getenv("OSINFO_SYSTEM_DIR"); + if (!path) + path = DATA_DIR "/osinfo"; - dbdir = g_strdup_printf("%s/db", path); - file = g_file_new_for_path(dbdir); + file = g_file_new_for_path(path); + } g_object_set_data(G_OBJECT(file), "data-format", GINT_TO_POINTER(OSINFO_DATA_FORMAT_NATIVE)); - g_free(dbdir); return file; } static GFile *osinfo_loader_get_local_path(void) { GFile *file; - file = g_file_new_for_path(SYS_CONF_DIR "/libosinfo/db"); + const gchar *path = g_getenv("OSINFO_LOCAL_DIR"); + + if (!path) { + path = SYS_CONF_DIR "/osinfo"; + + if (access(path, R_OK) == -1) { + const gchar *oldpath = SYS_CONF_DIR "/libosinfo/db"; + if (access(oldpath, R_OK) != -1) { + static gboolean warned = FALSE; + + if (!warned) { + g_printerr("%s is deprecated, please use %s instead. " + "Support %s will be removed in a future " + "release", + oldpath, path, oldpath); + warned = TRUE; + } + path = oldpath; + } + } + } + + file = g_file_new_for_path(path); g_object_set_data(G_OBJECT(file), "data-format", GINT_TO_POINTER(OSINFO_DATA_FORMAT_NATIVE)); return file; @@ -2305,14 +2343,36 @@ static GFile *osinfo_loader_get_local_path(void) static GFile *osinfo_loader_get_user_path(void) { GFile *file; - gchar *dbdir; + const gchar *path = g_getenv("OSINFO_USER_DIR"); const gchar *configdir = g_get_user_config_dir(); - dbdir = g_strdup_printf("%s/libosinfo/db", configdir); - file = g_file_new_for_path(dbdir); + if (path) { + file = g_file_new_for_path(path); + } else { + gchar *dbdir = g_strdup_printf("%s/osinfo", configdir); + if (access(dbdir, R_OK) == -1) { + static gboolean warned = FALSE; + gchar *olddir = g_strdup_printf("%s/libosinfo/db", configdir); + if (access(olddir, R_OK) != -1) { + if (!warned) { + g_printerr("%s is deprecated, please use %s instead. " + "Support %s will be removed in a future " + "release", + olddir, dbdir, olddir); + warned = TRUE; + } + g_free(dbdir); + dbdir = olddir; + } else { + g_free(olddir); + } + } + file = g_file_new_for_path(dbdir); + g_free(dbdir); + } + g_object_set_data(G_OBJECT(file), "data-format", GINT_TO_POINTER(OSINFO_DATA_FORMAT_NATIVE)); - g_free(dbdir); return file; } -- 2.7.4 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo