Enlightenment CVS committal

Author  : ningerso
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_config.c 


Log Message:
Translate config values to standard environment variable formatting and
prioritize env above user config.

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_config.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -r1.32 -r1.33
--- ewl_config.c        12 Nov 2007 22:42:22 -0000      1.32
+++ ewl_config.c        14 Nov 2007 06:44:04 -0000      1.33
@@ -5,12 +5,20 @@
 #include "ewl_debug.h"
 
 #include <Evas.h>
+#include <ctype.h>
 #include <fcntl.h>
 #include <libgen.h>
 
 Ewl_Config *ewl_config = NULL;
 Ewl_Config_Cache ewl_config_cache;
 
+/*
+ * @internal
+ * @def EWL_CONFIG_KEY_NOMATCH
+ * Marker used to set when a config key has no matching value
+ */
+#define EWL_CONFIG_KEY_NOMATCH ((char *)0xdeadbeef)
+
 extern Ecore_List *ewl_embed_list;
 
 static int ewl_config_load(Ewl_Config *cfg);
@@ -26,6 +34,7 @@
 static Ecore_Hash *ewl_config_set_hash_get(Ewl_Config *cfg,
                                        Ewl_State_Type state);
 static const char *ewl_config_get(Ewl_Config *cfg, const char *key);
+static const char * ewl_config_env_get(Ewl_Config *cfg, const char *key);
 static char *ewl_config_trim(char *v);
 static char *ewl_config_file_name_user_get(Ewl_Config *cfg);
 static char *ewl_config_file_name_system_get(Ewl_Config *cfg);
@@ -709,6 +718,10 @@
        {
                /* we got our value, just NOP */
        }
+       else if ((val = ewl_config_env_get(cfg, key)))
+       {
+               /* we got our value, just NOP */
+       }
        else if (cfg->data.user
                        && (val = ecore_hash_get(cfg->data.user, key)))
        {
@@ -719,6 +732,42 @@
        {
                /* we got our value, just NOP */
        }
+
+       DRETURN_PTR(val, DLEVEL_STABLE);
+}
+
+/* Look up hash values in the environment and cache the results. */
+static const char *
+ewl_config_env_get(Ewl_Config *cfg, const char *key)
+{
+       int kpos, epos = 0;
+       const char *val = NULL;
+       char var_name[PATH_MAX];
+
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET(cfg, NULL);
+       DCHECK_PARAM_PTR_RET(key, NULL);
+
+       /* Skip all leading non-alphanumeric characters */
+       for (kpos = 0; (key[kpos] && !isalnum(key[kpos])); kpos++);
+
+       /*
+        * Copy the config variable name in all upper case and substitute _ for
+        * any non-alphanumeric characters.
+        */
+       while (epos < PATH_MAX && key[kpos])
+       {
+               if (isalnum(key[kpos]))
+                       var_name[epos] = toupper(key[kpos]);
+               else
+                       var_name[epos] = '_';
+               epos++;
+               kpos++;
+       }
+
+       var_name[epos] = '\0';
+
+       if (var_name[0]) val = getenv(var_name);
 
        DRETURN_PTR(val, DLEVEL_STABLE);
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to