libaacs | branch: master | npzacs <[email protected]> | Tue Nov 9 19:34:46 2010 +0200| [bd30c06d63376ea6440a97670d837dd9ff37e12f] | committer: npzacs
Use xdg directories for simple config files > http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=bd30c06d63376ea6440a97670d837dd9ff37e12f --- src/file/keydbcfg.c | 49 +++++++++++++++++++++++++++++++++++-------------- 1 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/file/keydbcfg.c b/src/file/keydbcfg.c index f6c2ab8..0558269 100644 --- a/src/file/keydbcfg.c +++ b/src/file/keydbcfg.c @@ -19,6 +19,8 @@ #include "keydbcfg.h" +#include "xdg.h" + #include "util/strutl.h" #include "util/logging.h" #include "util/macro.h" @@ -30,6 +32,7 @@ #define USER_CFG_DIR "/.libaacs/" #define SYSTEM_CFG_DIR "/etc/libaacs/" +#define CFG_DIR "aacs" #define CFG_FILE_NAME "KEYDB.cfg" #define CERT_FILE_NAME "HostKeyCertificate.txt" @@ -67,27 +70,45 @@ static char *_load_file(FILE *fp) return data; } -static FILE *_open_cfg_file(const char *file_name, int user) +static FILE *_open_cfg_file_user(const char *file_name) { - char *cfg_file = NULL; - - if (user) { - const char *userhome = getenv("HOME"); - cfg_file = str_printf("%s%s%s", userhome, USER_CFG_DIR, file_name); + const char *cfg_dir = xdg_get_config_home(); - } else { - cfg_file = str_printf("%s%s", SYSTEM_CFG_DIR, file_name); + if (!cfg_dir) { + return NULL; } - FILE *fp = fopen(cfg_file, "r"); + char *cfg_file = str_printf("%s/%s/%s", cfg_dir, CFG_DIR, file_name); + FILE *fp = fopen(cfg_file, "r"); DEBUG(DBG_FILE, fp ? "Reading %s\n" : "%s not found\n", cfg_file); - X_FREE(cfg_file); return fp; } +static FILE *_open_cfg_file_system(const char *file_name) +{ + const char *dir = NULL; + + while (NULL != (dir = xdg_get_config_system(dir))) { + + char *cfg_file = str_printf("%s/%s/%s", dir, CFG_DIR, file_name); + + FILE *fp = fopen(cfg_file, "r"); + if (fp) { + DEBUG(DBG_FILE, "Reading %s\n", cfg_file); + X_FREE(cfg_file); + return fp; + } + + DEBUG(DBG_FILE, "%s not found\n", cfg_file); + X_FREE(cfg_file); + } + + return NULL; +} + static int _parse_pk_file(config_file *cf, FILE *fp) { char *data = _load_file(fp); @@ -159,13 +180,13 @@ int keydbcfg_load_pk_file(config_file *cf) FILE *fp; int result = 0; - fp = _open_cfg_file(pk_file_name, 0); + fp = _open_cfg_file_user(pk_file_name); if (fp) { result += _parse_pk_file(cf, fp); fclose(fp); } - fp = _open_cfg_file(pk_file_name, 1); + fp = _open_cfg_file_system(pk_file_name); if (fp) { result += _parse_pk_file(cf, fp); fclose(fp); @@ -180,13 +201,13 @@ int keydbcfg_load_cert_file(config_file *cf) FILE *fp; int result = 0; - fp = _open_cfg_file(cert_file_name, 0); + fp = _open_cfg_file_user(cert_file_name); if (fp) { result += _parse_cert_file(cf, fp); fclose(fp); } - fp = _open_cfg_file(cert_file_name, 1); + fp = _open_cfg_file_system(cert_file_name); if (fp) { result += _parse_cert_file(cf, fp); fclose(fp); _______________________________________________ libaacs-devel mailing list [email protected] http://mailman.videolan.org/listinfo/libaacs-devel
