libaacs | branch: master | npzacs <[email protected]> | Wed Nov 10 20:30:32 2010 
+0200| [7f4b6ac9072eea2242ef74970052ca393ddf8bf3] | committer: npzacs 

Search for KEYDB.cfg from xdg directories.
NOTE: DOES NOT SEARCH FROM ~/.libaacs/ or /etc/aacs/ ANYMORE !

> http://git.videolan.org/gitweb.cgi/libaacs.git/?a=commit;h=7f4b6ac9072eea2242ef74970052ca393ddf8bf3
---

 src/file/keydbcfg.c |   56 +++++++++++++++++++++++++-------------------------
 1 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/src/file/keydbcfg.c b/src/file/keydbcfg.c
index 0558269..93d95ed 100644
--- a/src/file/keydbcfg.c
+++ b/src/file/keydbcfg.c
@@ -30,8 +30,6 @@
 #include <string.h>
 
 
-#define USER_CFG_DIR   "/.libaacs/"
-#define SYSTEM_CFG_DIR "/etc/libaacs/"
 #define CFG_DIR        "aacs"
 
 #define CFG_FILE_NAME  "KEYDB.cfg"
@@ -70,7 +68,7 @@ static char *_load_file(FILE *fp)
     return data;
 }
 
-static FILE *_open_cfg_file_user(const char *file_name)
+static FILE *_open_cfg_file_user(const char *file_name, char **path)
 {
     const char *cfg_dir = xdg_get_config_home();
 
@@ -82,12 +80,17 @@ static FILE *_open_cfg_file_user(const char *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);
+
+    if (fp && path) {
+        *path = cfg_file;
+    } else {
+        X_FREE(cfg_file);
+    }
 
     return fp;
 }
 
-static FILE *_open_cfg_file_system(const char *file_name)
+static FILE *_open_cfg_file_system(const char *file_name, char **path)
 {
     const char *dir = NULL;
 
@@ -98,7 +101,13 @@ static FILE *_open_cfg_file_system(const char *file_name)
         FILE *fp = fopen(cfg_file, "r");
         if (fp) {
             DEBUG(DBG_FILE, "Reading %s\n", cfg_file);
-            X_FREE(cfg_file);
+
+            if (path) {
+                *path = cfg_file;
+            } else {
+                X_FREE(cfg_file);
+            }
+
             return fp;
         }
 
@@ -180,13 +189,13 @@ int keydbcfg_load_pk_file(config_file *cf)
     FILE *fp;
     int result = 0;
 
-    fp = _open_cfg_file_user(pk_file_name);
+    fp = _open_cfg_file_user(pk_file_name, NULL);
     if (fp) {
         result += _parse_pk_file(cf, fp);
         fclose(fp);
     }
 
-    fp = _open_cfg_file_system(pk_file_name);
+    fp = _open_cfg_file_system(pk_file_name, NULL);
     if (fp) {
         result += _parse_pk_file(cf, fp);
         fclose(fp);
@@ -201,13 +210,13 @@ int keydbcfg_load_cert_file(config_file *cf)
     FILE *fp;
     int result = 0;
 
-    fp = _open_cfg_file_user(cert_file_name);
+    fp = _open_cfg_file_user(cert_file_name, NULL);
     if (fp) {
         result += _parse_cert_file(cf, fp);
         fclose(fp);
     }
 
-    fp = _open_cfg_file_system(cert_file_name);
+    fp = _open_cfg_file_system(cert_file_name, NULL);
     if (fp) {
         result += _parse_cert_file(cf, fp);
         fclose(fp);
@@ -218,30 +227,21 @@ int keydbcfg_load_cert_file(config_file *cf)
 
 char *keydbcfg_find_config_file(void)
 {
-    static const char cfg_file_user[]   = USER_CFG_DIR   CFG_FILE_NAME;
-    static const char cfg_file_system[] = SYSTEM_CFG_DIR CFG_FILE_NAME;
-
-    const char *userhome = getenv("HOME");
+    static const char cfg_file_name[] = CFG_FILE_NAME;
 
-    char *cfg_file = str_printf("%s%s", userhome, cfg_file_user);
+    char       *cfg_file = NULL;
+    FILE       *fp       = NULL;
 
-    FILE *fp = fopen(cfg_file, "r");
+    fp = _open_cfg_file_user(cfg_file_name, &cfg_file);
     if (!fp) {
-
-        cfg_file = (char*)realloc(cfg_file, sizeof(cfg_file_system));
-        strcpy(cfg_file, cfg_file_system);
-
-        fp = fopen(cfg_file, "r");
-        if (!fp) {
-            DEBUG(DBG_FILE, "No config file found!\n");
-            X_FREE(cfg_file);
-            return NULL;
-        }
+        fp = _open_cfg_file_system(cfg_file_name, &cfg_file);
     }
 
-    fclose(fp);
+    if (fp) {
+        DEBUG(DBG_FILE, "found config file: %s\n", cfg_file);
+        fclose(fp);
+    }
 
-    DEBUG(DBG_FILE, "found config file: %s\n", cfg_file);
     return cfg_file;
 }
 

_______________________________________________
libaacs-devel mailing list
[email protected]
http://mailman.videolan.org/listinfo/libaacs-devel

Reply via email to