libaacs | branch: master | npzacs <npz...@gmail.com> | Mon Oct 7 13:29:56 2013 +0300| [7fcf05e653f9bb829bdc9a6d8b24739872d9a3c6] | committer: npzacs
Allow opening config files in write mode > http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=7fcf05e653f9bb829bdc9a6d8b24739872d9a3c6 --- src/file/keydbcfg.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/file/keydbcfg.c b/src/file/keydbcfg.c index 132af58..8d93d1f 100644 --- a/src/file/keydbcfg.c +++ b/src/file/keydbcfg.c @@ -120,7 +120,7 @@ static char *_load_file(FILE *fp) return data; } -static FILE *_open_cfg_file_user(const char *file_name, char **path) +static char *_config_file_user(const char *file_name) { const char *cfg_dir = get_config_home(); @@ -128,10 +128,27 @@ static FILE *_open_cfg_file_user(const char *file_name, char **path) return NULL; } - char *cfg_file = str_printf("%s/%s/%s", cfg_dir, CFG_DIR, file_name); - FILE *fp = fopen(cfg_file, "r"); + return str_printf("%s/%s/%s", cfg_dir, CFG_DIR, file_name); +} + +static FILE *_open_cfg_file_user(const char *file_name, char **path, const char *mode) +{ + char *cfg_file = _config_file_user(file_name); + + if (!cfg_file) { + return NULL; + } + + if (*mode == 'w') { + if (!_mkpath(cfg_file)) { + X_FREE(cfg_file); + return NULL; + } + } + + FILE *fp = fopen(cfg_file, mode); - DEBUG(DBG_FILE, fp ? "Reading %s\n" : "%s not found\n", cfg_file); + DEBUG(DBG_FILE, fp ? "Opened %s for %s\n" : "%s not found\n", cfg_file, mode); if (fp && path) { *path = cfg_file; @@ -285,7 +302,7 @@ static int _load_pk_file(config_file *cf) FILE *fp; int result = 0; - fp = _open_cfg_file_user(pk_file_name, NULL); + fp = _open_cfg_file_user(pk_file_name, NULL, "r"); if (fp) { result += _parse_pk_file(cf, fp); fclose(fp); @@ -306,7 +323,7 @@ static int _load_cert_file(config_file *cf) FILE *fp; int result = 0; - fp = _open_cfg_file_user(cert_file_name, NULL); + fp = _open_cfg_file_user(cert_file_name, NULL, "r"); if (fp) { result += _parse_cert_file(cf, fp); fclose(fp); @@ -540,7 +557,7 @@ static char *_find_config_file(void) char *cfg_file = NULL; FILE *fp = NULL; - fp = _open_cfg_file_user(cfg_file_name, &cfg_file); + fp = _open_cfg_file_user(cfg_file_name, &cfg_file, "r"); if (!fp) { fp = _open_cfg_file_system(cfg_file_name, &cfg_file); } _______________________________________________ libaacs-devel mailing list libaacs-devel@videolan.org https://mailman.videolan.org/listinfo/libaacs-devel