#include #include #include #include typedef struct { char *var; char *value; } cfgEntry; #define MAX_ENTRIES 20 static int numRead = 0; static cfgEntry *cfgData [MAX_ENTRIES]; char *GetEnv (const char *env_str) { int i; char *ret_val; ret_val = getenv (env_str); if (ret_val == NULL) { assert (cfgData != NULL); i = 0; while ((i < numRead) && (strcmp (env_str, cfgData [i]->var) != 0)) i++; if (i < numRead) ret_val = cfgData [i]->value; } return (ret_val); } void FreeSDDASCfg () { int i; for (i = 0; i < numRead; i++) { free (cfgData [i]->var); free (cfgData [i]->value); free (cfgData [i]); } numRead = 0; } void InitSDDASCfg (char *path) { char tmp [1024]; /* This will open the config file and keep it values in memory. */ if (numRead == 0) { FILE *cfgFile; char *value, *ptr; int found_config = 0; cfgFile = fopen (path, "r"); if (cfgFile != NULL) { while ((numRead < MAX_ENTRIES) && (fgets (tmp, 1024, cfgFile) != NULL)) { value = strchr (tmp, '='); if (value == NULL) { fprintf (stderr, "Error reading sddas.cfg file - No equal sign!\n"); } else { cfgData [numRead] = (cfgEntry *) malloc (sizeof (cfgEntry)); value [0] = '\0'; value++; /* value is now one past the equal sign */ cfgData [numRead]->var = strdup (tmp); if (strcmp (tmp, "SDDAS_CONFIG") == 0) found_config = 1; ptr = strchr (value, '"'); if (ptr == NULL) { fprintf (stderr, "Error reading sddas.cfg file - no leading quote!\n"); } else { ptr [0] = '\0'; ptr++; /* ptr is now a correct value with a trailing "*/ value = strrchr (ptr, '"'); if (value == NULL) { fprintf (stderr, "Error reading sddas.cfg file - no trailing quote!\n"); } else { value [0] = '\0'; cfgData [numRead]->value = strdup (ptr); numRead++; } } } } fclose (cfgFile); } /* If SDDAS_CONFIG is not set, set it! */ if (found_config == 0) { strcpy (tmp, GetEnv ("SDDAS_HOME")); strcat (tmp, "/config"); cfgData [numRead] = (cfgEntry *) malloc (sizeof (cfgEntry)); cfgData [numRead]->var = strdup ("SDDAS_CONFIG"); cfgData [numRead]->value = strdup (tmp); numRead++; } } } #ifdef TEST int main () { InitSDDASCfg ("/devel/sddas/config"); printf ("%s\n", GetEnv ("SDDAS_HICOLOR")); FreeSDDASCfg (); exit (0); } #endif