diff -r cf499fd51df7 -r 4277359896dc librazor/root.c --- a/librazor/root.c Sat Aug 23 16:07:09 2014 +0100 +++ b/librazor/root.c Tue Sep 09 15:04:24 2014 +0100 @@ -1,7 +1,7 @@ /* * Copyright (C) 2008 Kristian Høgsberg * Copyright (C) 2008 Red Hat, Inc - * Copyright (C) 2009, 2011, 2012 J. Ali Harlow + * Copyright (C) 2009, 2011, 2012, 2014 J. Ali Harlow * * 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 @@ -41,6 +41,14 @@ #define O_BINARY 0 #endif +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef TRUE +#define TRUE (!FALSE) +#endif + static const char system_repo_filename[] = "system.rzdb"; /* * system_lock_filename is chosen to be the same as the pre v0.3 @@ -50,11 +58,12 @@ */ static const char system_lock_filename[] = "system-next.rzdb"; #ifdef MSWIN_API -#define RAZOR_ROOT_PATH NULL +#define RAZOR_DATABASE_PATH NULL #else -#define RAZOR_ROOT_PATH "/var/lib/razor" +#define RAZOR_DATABASE_PATH "/var/lib/razor" #endif -static const char *razor_root_path = RAZOR_ROOT_PATH; +static char *razor_database_path = RAZOR_DATABASE_PATH; +static int razor_database_path_alloced = FALSE; struct razor_root { struct razor_set *system; @@ -65,17 +74,41 @@ razor_root_init(void) { #ifdef MSWIN_API - static char root_path[MAX_PATH]; - if (!razor_root_path) { + static char database_path[MAX_PATH]; + if (!razor_database_path) { SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA | CSIDL_FLAG_DONT_VERIFY, NULL, 0, - root_path); - strcat(root_path, "\\Razor"); - razor_root_path = root_path; + database_path); + strcat(database_path, "\\Razor"); + razor_database_path = database_path; + razor_database_path_alloced = FALSE; } #endif } +RAZOR_EXPORT const char * +razor_get_database_path() +{ + razor_root_init(); + + return razor_database_path; +} + +RAZOR_EXPORT void +razor_set_database_path(const char *database_path) +{ + if (razor_database_path_alloced) + free(razor_database_path); + + if (database_path) { + razor_database_path = strdup(database_path); + razor_database_path_alloced = TRUE; + } else { + razor_database_path = RAZOR_DATABASE_PATH; + razor_database_path_alloced = FALSE; + } +} + RAZOR_EXPORT int razor_root_create(const char *root, struct razor_error **error) { @@ -101,7 +134,8 @@ return -1; } - file = razor_concat(razor_root_path, "/", system_repo_filename, NULL); + file = razor_concat(razor_database_path, "/", system_repo_filename, + NULL); path = razor_path_add_root(file, root); retval = !stat(path, &buf); if (retval) { @@ -152,7 +186,7 @@ return NULL; } - s = razor_concat(razor_root_path, "/", system_lock_filename, NULL); + s = razor_concat(razor_database_path, "/", system_lock_filename, NULL); lock_path = razor_path_add_root(s, root); free(s); @@ -168,7 +202,7 @@ return NULL; } - s = razor_concat(razor_root_path, "/", system_repo_filename, NULL); + s = razor_concat(razor_database_path, "/", system_repo_filename, NULL); image->path = razor_path_add_root(s, root); free(s); @@ -198,7 +232,7 @@ return NULL; } - s = razor_concat(razor_root_path, "/", system_lock_filename, NULL); + s = razor_concat(razor_database_path, "/", system_lock_filename, NULL); path = razor_path_add_root(s, root); free(s); @@ -212,7 +246,7 @@ free(path); - s = razor_concat(razor_root_path, "/", system_repo_filename, NULL); + s = razor_concat(razor_database_path, "/", system_repo_filename, NULL); path = razor_path_add_root(s, root); free(s);