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

Reply via email to