diff options
author | Emil Velikov <[email protected]> | 2018-08-06 11:19:22 +0800 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2018-08-17 17:16:32 +0100 |
commit | 0da417129e070193091452c8ffdec4df12070bc6 (patch) | |
tree | b02a249bbb4d260b38c8a805327db34ab4ac5c54 /src/util | |
parent | d9ea015ced39bab7fb32cc772307c4fb647403bd (diff) |
xmlconfig: refine driParseConfigFiles to use parseOneConfigFile
Also prepare for the usage of following parseConfigDir patch.
Signed-off-by: Qiang Yu <[email protected]>
Acked-by: Michel Dänzer <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
[Emil: add #include <limits.h>]
Signed-off-by: Emil Velikov <[email protected]>
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/xmlconfig.c | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/src/util/xmlconfig.c b/src/util/xmlconfig.c index ba657294c1c..035d0296efe 100644 --- a/src/util/xmlconfig.c +++ b/src/util/xmlconfig.c @@ -27,6 +27,7 @@ * \author Felix Kuehling */ +#include <limits.h> #include <stdarg.h> #include <stdio.h> #include <string.h> @@ -866,9 +867,8 @@ initOptionCache(driOptionCache *cache, const driOptionCache *info) } } -/** \brief Parse the named configuration file */ static void -parseOneConfigFile(XML_Parser p) +_parseOneConfigFile(XML_Parser p) { #define BUF_SIZE 0x1000 struct OptConfData *data = (struct OptConfData *)XML_GetUserData (p); @@ -907,6 +907,28 @@ parseOneConfigFile(XML_Parser p) #undef BUF_SIZE } +/** \brief Parse the named configuration file */ +static void +parseOneConfigFile(struct OptConfData *data, const char *filename) +{ + XML_Parser p; + + p = XML_ParserCreate (NULL); /* use encoding specified by file */ + XML_SetElementHandler (p, optConfStartElem, optConfEndElem); + XML_SetUserData (p, data); + data->parser = p; + data->name = filename; + data->ignoringDevice = 0; + data->ignoringApp = 0; + data->inDriConf = 0; + data->inDevice = 0; + data->inApp = 0; + data->inOption = 0; + + _parseOneConfigFile (p); + XML_ParserFree (p); +} + #ifndef SYSCONFDIR #define SYSCONFDIR "/etc" #endif @@ -915,9 +937,7 @@ void driParseConfigFiles(driOptionCache *cache, const driOptionCache *info, int screenNum, const char *driverName) { - char *filenames[2] = { SYSCONFDIR "/drirc", NULL}; char *home; - uint32_t i; struct OptConfData userData; initOptionCache (cache, info); @@ -927,39 +947,14 @@ driParseConfigFiles(driOptionCache *cache, const driOptionCache *info, userData.driverName = driverName; userData.execName = util_get_process_name(); + parseOneConfigFile(&userData, SYSCONFDIR "/drirc"); + if ((home = getenv ("HOME"))) { - uint32_t len = strlen (home); - filenames[1] = malloc(len + 7+1); - if (filenames[1] == NULL) - __driUtilMessage ("Can't allocate memory for %s/.drirc.", home); - else { - memcpy (filenames[1], home, len); - memcpy (filenames[1] + len, "/.drirc", 7+1); - } - } + char filename[PATH_MAX]; - for (i = 0; i < 2; ++i) { - XML_Parser p; - if (filenames[i] == NULL) - continue; - - p = XML_ParserCreate (NULL); /* use encoding specified by file */ - XML_SetElementHandler (p, optConfStartElem, optConfEndElem); - XML_SetUserData (p, &userData); - userData.parser = p; - userData.name = filenames[i]; - userData.ignoringDevice = 0; - userData.ignoringApp = 0; - userData.inDriConf = 0; - userData.inDevice = 0; - userData.inApp = 0; - userData.inOption = 0; - - parseOneConfigFile (p); - XML_ParserFree (p); + snprintf(filename, PATH_MAX, "%s/.drirc", home); + parseOneConfigFile(&userData, filename); } - - free(filenames[1]); } void |