X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fcommon%2Fxmlconfig.c;h=31c5447e615752c903202476ffab6d4a5973e32f;hb=f8894fab0294817481b30e3cc40f6b3ccfe9314d;hp=738b1ae97fd374d0caeeb2196becc861245d0dad;hpb=c7f5c9a3dc6350252e73b541bb85ab3ed9e64a9c;p=mesa.git diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c index 738b1ae97fd..31c5447e615 100644 --- a/src/mesa/drivers/dri/common/xmlconfig.c +++ b/src/mesa/drivers/dri/common/xmlconfig.c @@ -27,12 +27,13 @@ * \author Felix Kuehling */ -#include "main/glheader.h" - +#include +#include #include #include #include #include +#include #include #include #include "main/imports.h" @@ -47,13 +48,21 @@ extern char *program_invocation_name, *program_invocation_short_name; # endif # define GET_PROGRAM_NAME() program_invocation_short_name +#elif defined(__CYGWIN__) +# define GET_PROGRAM_NAME() program_invocation_short_name #elif defined(__FreeBSD__) && (__FreeBSD__ >= 2) # include # if (__FreeBSD_version >= 440000) # include # define GET_PROGRAM_NAME() getprogname() # endif -#elif defined(__NetBSD__) && defined(__NetBSD_Version) && (__NetBSD_Version >= 106000100) +#elif defined(__NetBSD__) && defined(__NetBSD_Version__) && (__NetBSD_Version__ >= 106000100) +# include +# define GET_PROGRAM_NAME() getprogname() +#elif defined(__DragonFly__) +# include +# define GET_PROGRAM_NAME() getprogname() +#elif defined(__APPLE__) # include # define GET_PROGRAM_NAME() getprogname() #elif defined(__sun) @@ -61,15 +70,37 @@ extern char *program_invocation_name, *program_invocation_short_name; the basename to match BSD getprogname() */ # include # include -# define GET_PROGRAM_NAME() basename(getexecname()) + +static const char * +__getProgramName() +{ + static const char *progname; + + if (progname == NULL) { + const char *e = getexecname(); + if (e != NULL) { + /* Have to make a copy since getexecname can return a readonly + string, but basename expects to be able to modify its arg. */ + char *n = strdup(e); + if (n != NULL) { + progname = basename(n); + } + } + } + return progname; +} + +# define GET_PROGRAM_NAME() __getProgramName() #endif #if !defined(GET_PROGRAM_NAME) -# if defined(__OpenBSD__) || defined(NetBSD) || defined(__UCLIBC__) +# if defined(__OpenBSD__) || defined(NetBSD) || defined(__UCLIBC__) || defined(ANDROID) /* This is a hack. It's said to work on OpenBSD, NetBSD and GNU. * Rogelio M.Serrano Jr. reported it's also working with UCLIBC. It's * used as a last resort, if there is no documented facility available. */ -static const char *__getProgramName () { +static const char * +__getProgramName() +{ extern const char *__progname; char * arg = strrchr(__progname, '/'); if (arg) @@ -85,25 +116,27 @@ static const char *__getProgramName () { #endif /** \brief Find an option in an option cache with the name as key */ -static GLuint findOption (const driOptionCache *cache, const char *name) { - GLuint len = strlen (name); - GLuint size = 1 << cache->tableSize, mask = size - 1; - GLuint hash = 0; - GLuint i, shift; +static uint32_t +findOption(const driOptionCache *cache, const char *name) +{ + uint32_t len = strlen (name); + uint32_t size = 1 << cache->tableSize, mask = size - 1; + uint32_t hash = 0; + uint32_t i, shift; /* compute a hash from the variable length name */ for (i = 0, shift = 0; i < len; ++i, shift = (shift+8) & 31) - hash += (GLuint)name[i] << shift; + hash += (uint32_t)name[i] << shift; hash *= hash; hash = (hash >> (16-cache->tableSize/2)) & mask; /* this is just the starting point of the linear search for the option */ for (i = 0; i < size; ++i, hash = (hash+1) & mask) { /* if we hit an empty entry then the option is not defined (yet) */ - if (cache->info[hash].name == 0) - break; - else if (!strcmp (name, cache->info[hash].name)) - break; + if (cache->info[hash].name == 0) + break; + else if (!strcmp (name, cache->info[hash].name)) + break; } /* this assertion fails if the hash table is full */ assert (i < size); @@ -111,22 +144,12 @@ static GLuint findOption (const driOptionCache *cache, const char *name) { return hash; } -/** \brief Count the real number of options in an option cache */ -static GLuint countOptions (const driOptionCache *cache) { - GLuint size = 1 << cache->tableSize; - GLuint i, count = 0; - for (i = 0; i < size; ++i) - if (cache->info[i].name) - count++; - return count; -} - -/** \brief Like strdup but using MALLOC and with error checking. */ +/** \brief Like strdup but using malloc and with error checking. */ #define XSTRDUP(dest,source) do { \ - GLuint len = strlen (source); \ - if (!(dest = MALLOC (len+1))) { \ - fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); \ - abort(); \ + uint32_t len = strlen (source); \ + if (!(dest = malloc(len+1))) { \ + fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); \ + abort(); \ } \ memcpy (dest, source, len+1); \ } while (0) @@ -135,14 +158,15 @@ static int compare (const void *a, const void *b) { return strcmp (*(char *const*)a, *(char *const*)b); } /** \brief Binary search in a string array. */ -static GLuint bsearchStr (const XML_Char *name, - const XML_Char *elems[], GLuint count) { +static uint32_t +bsearchStr (const XML_Char *name, const XML_Char *elems[], uint32_t count) +{ const XML_Char **found; found = bsearch (&name, elems, count, sizeof (XML_Char *), compare); if (found) - return found - elems; + return found - elems; else - return count; + return count; } /** \brief Locale-independent integer parser. @@ -154,50 +178,52 @@ static GLuint bsearchStr (const XML_Char *name, * returning tail points to the first character that is not part of * the integer number. If no number was found then tail points to the * start of the input string. */ -static GLint strToI (const XML_Char *string, const XML_Char **tail, int base) { - GLint radix = base == 0 ? 10 : base; - GLint result = 0; - GLint sign = 1; - GLboolean numberFound = GL_FALSE; +static int +strToI(const XML_Char *string, const XML_Char **tail, int base) +{ + int radix = base == 0 ? 10 : base; + int result = 0; + int sign = 1; + bool numberFound = false; const XML_Char *start = string; assert (radix >= 2 && radix <= 36); if (*string == '-') { - sign = -1; - string++; + sign = -1; + string++; } else if (*string == '+') - string++; + string++; if (base == 0 && *string == '0') { - numberFound = GL_TRUE; - if (*(string+1) == 'x' || *(string+1) == 'X') { - radix = 16; - string += 2; - } else { - radix = 8; - string++; - } + numberFound = true; + if (*(string+1) == 'x' || *(string+1) == 'X') { + radix = 16; + string += 2; + } else { + radix = 8; + string++; + } } do { - GLint digit = -1; - if (radix <= 10) { - if (*string >= '0' && *string < '0' + radix) - digit = *string - '0'; - } else { - if (*string >= '0' && *string <= '9') - digit = *string - '0'; - else if (*string >= 'a' && *string < 'a' + radix - 10) - digit = *string - 'a' + 10; - else if (*string >= 'A' && *string < 'A' + radix - 10) - digit = *string - 'A' + 10; - } - if (digit != -1) { - numberFound = GL_TRUE; - result = radix*result + digit; - string++; - } else - break; - } while (GL_TRUE); + int digit = -1; + if (radix <= 10) { + if (*string >= '0' && *string < '0' + radix) + digit = *string - '0'; + } else { + if (*string >= '0' && *string <= '9') + digit = *string - '0'; + else if (*string >= 'a' && *string < 'a' + radix - 10) + digit = *string - 'a' + 10; + else if (*string >= 'A' && *string < 'A' + radix - 10) + digit = *string - 'A' + 10; + } + if (digit != -1) { + numberFound = true; + result = radix*result + digit; + string++; + } else + break; + } while (true); *tail = numberFound ? string : start; return sign * result; } @@ -206,7 +232,7 @@ static GLint strToI (const XML_Char *string, const XML_Char **tail, int base) { * * Works similar to strtod. Leading space is NOT skipped. The input * number may have an optional sign. '.' is interpreted as decimal - * point and may occor at most once. Optionally the number may end in + * point and may occur at most once. Optionally the number may end in * [eE], where is an integer as recognized by * strToI. In that case the result is number * 10^exponent. After * returning tail points to the first character that is not part of @@ -214,189 +240,226 @@ static GLint strToI (const XML_Char *string, const XML_Char **tail, int base) { * to the start of the input string. * * Uses two passes for maximum accuracy. */ -static GLfloat strToF (const XML_Char *string, const XML_Char **tail) { - GLint nDigits = 0, pointPos, exponent; - GLfloat sign = 1.0f, result = 0.0f, scale; +static float +strToF(const XML_Char *string, const XML_Char **tail) +{ + int nDigits = 0, pointPos, exponent; + float sign = 1.0f, result = 0.0f, scale; const XML_Char *start = string, *numStart; /* sign */ if (*string == '-') { - sign = -1.0f; - string++; + sign = -1.0f; + string++; } else if (*string == '+') - string++; + string++; /* first pass: determine position of decimal point, number of * digits, exponent and the end of the number. */ numStart = string; while (*string >= '0' && *string <= '9') { - string++; - nDigits++; + string++; + nDigits++; } pointPos = nDigits; if (*string == '.') { - string++; - while (*string >= '0' && *string <= '9') { - string++; - nDigits++; - } + string++; + while (*string >= '0' && *string <= '9') { + string++; + nDigits++; + } } if (nDigits == 0) { - /* no digits, no number */ - *tail = start; - return 0.0f; + /* no digits, no number */ + *tail = start; + return 0.0f; } *tail = string; if (*string == 'e' || *string == 'E') { - const XML_Char *expTail; - exponent = strToI (string+1, &expTail, 10); - if (expTail == string+1) - exponent = 0; - else - *tail = expTail; + const XML_Char *expTail; + exponent = strToI (string+1, &expTail, 10); + if (expTail == string+1) + exponent = 0; + else + *tail = expTail; } else - exponent = 0; + exponent = 0; string = numStart; /* scale of the first digit */ - scale = sign * (GLfloat)pow (10.0, (GLdouble)(pointPos-1 + exponent)); + scale = sign * (float)pow (10.0, (double)(pointPos-1 + exponent)); /* second pass: parse digits */ do { - if (*string != '.') { - assert (*string >= '0' && *string <= '9'); - result += scale * (GLfloat)(*string - '0'); - scale *= 0.1f; - nDigits--; - } - string++; + if (*string != '.') { + assert (*string >= '0' && *string <= '9'); + result += scale * (float)(*string - '0'); + scale *= 0.1f; + nDigits--; + } + string++; } while (nDigits > 0); return result; } /** \brief Parse a value of a given type. */ -static GLboolean parseValue (driOptionValue *v, driOptionType type, - const XML_Char *string) { +static unsigned char +parseValue(driOptionValue *v, driOptionType type, const XML_Char *string) +{ const XML_Char *tail = NULL; /* skip leading white-space */ string += strspn (string, " \f\n\r\t\v"); switch (type) { case DRI_BOOL: - if (!strcmp (string, "false")) { - v->_bool = GL_FALSE; - tail = string + 5; - } else if (!strcmp (string, "true")) { - v->_bool = GL_TRUE; - tail = string + 4; - } - else - return GL_FALSE; - break; + if (!strcmp (string, "false")) { + v->_bool = false; + tail = string + 5; + } else if (!strcmp (string, "true")) { + v->_bool = true; + tail = string + 4; + } + else + return false; + break; case DRI_ENUM: /* enum is just a special integer */ case DRI_INT: - v->_int = strToI (string, &tail, 0); - break; + v->_int = strToI (string, &tail, 0); + break; case DRI_FLOAT: - v->_float = strToF (string, &tail); - break; + v->_float = strToF (string, &tail); + break; + case DRI_STRING: + free (v->_string); + v->_string = strndup(string, STRING_CONF_MAXLEN); + return GL_TRUE; } if (tail == string) - return GL_FALSE; /* empty string (or containing only white-space) */ + return false; /* empty string (or containing only white-space) */ /* skip trailing white space */ if (*tail) - tail += strspn (tail, " \f\n\r\t\v"); + tail += strspn (tail, " \f\n\r\t\v"); if (*tail) - return GL_FALSE; /* something left over that is not part of value */ + return false; /* something left over that is not part of value */ - return GL_TRUE; + return true; } /** \brief Parse a list of ranges of type info->type. */ -static GLboolean parseRanges (driOptionInfo *info, const XML_Char *string) { +static unsigned char +parseRanges(driOptionInfo *info, const XML_Char *string) +{ XML_Char *cp, *range; - GLuint nRanges, i; + uint32_t nRanges, i; driOptionRange *ranges; XSTRDUP (cp, string); /* pass 1: determine the number of ranges (number of commas + 1) */ range = cp; for (nRanges = 1; *range; ++range) - if (*range == ',') - ++nRanges; + if (*range == ',') + ++nRanges; - if ((ranges = MALLOC (nRanges*sizeof(driOptionRange))) == NULL) { - fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); - abort(); + if ((ranges = malloc(nRanges*sizeof(driOptionRange))) == NULL) { + fprintf (stderr, "%s: %d: out of memory.\n", __FILE__, __LINE__); + abort(); } /* pass 2: parse all ranges into preallocated array */ range = cp; for (i = 0; i < nRanges; ++i) { - XML_Char *end, *sep; - assert (range); - end = strchr (range, ','); - if (end) - *end = '\0'; - sep = strchr (range, ':'); - if (sep) { /* non-empty interval */ - *sep = '\0'; - if (!parseValue (&ranges[i].start, info->type, range) || - !parseValue (&ranges[i].end, info->type, sep+1)) - break; - if (info->type == DRI_INT && - ranges[i].start._int > ranges[i].end._int) - break; - if (info->type == DRI_FLOAT && - ranges[i].start._float > ranges[i].end._float) - break; - } else { /* empty interval */ - if (!parseValue (&ranges[i].start, info->type, range)) - break; - ranges[i].end = ranges[i].start; - } - if (end) - range = end+1; - else - range = NULL; - } - FREE (cp); + XML_Char *end, *sep; + assert (range); + end = strchr (range, ','); + if (end) + *end = '\0'; + sep = strchr (range, ':'); + if (sep) { /* non-empty interval */ + *sep = '\0'; + if (!parseValue (&ranges[i].start, info->type, range) || + !parseValue (&ranges[i].end, info->type, sep+1)) + break; + if (info->type == DRI_INT && + ranges[i].start._int > ranges[i].end._int) + break; + if (info->type == DRI_FLOAT && + ranges[i].start._float > ranges[i].end._float) + break; + } else { /* empty interval */ + if (!parseValue (&ranges[i].start, info->type, range)) + break; + ranges[i].end = ranges[i].start; + } + if (end) + range = end+1; + else + range = NULL; + } + free(cp); if (i < nRanges) { - FREE (ranges); - return GL_FALSE; + free(ranges); + return false; } else - assert (range == NULL); + assert (range == NULL); info->nRanges = nRanges; info->ranges = ranges; - return GL_TRUE; + return true; } /** \brief Check if a value is in one of info->ranges. */ -static GLboolean checkValue (const driOptionValue *v, const driOptionInfo *info) { - GLuint i; +static bool +checkValue(const driOptionValue *v, const driOptionInfo *info) +{ + uint32_t i; assert (info->type != DRI_BOOL); /* should be caught by the parser */ if (info->nRanges == 0) - return GL_TRUE; + return true; switch (info->type) { case DRI_ENUM: /* enum is just a special integer */ case DRI_INT: - for (i = 0; i < info->nRanges; ++i) - if (v->_int >= info->ranges[i].start._int && - v->_int <= info->ranges[i].end._int) - return GL_TRUE; - break; + for (i = 0; i < info->nRanges; ++i) + if (v->_int >= info->ranges[i].start._int && + v->_int <= info->ranges[i].end._int) + return true; + break; case DRI_FLOAT: - for (i = 0; i < info->nRanges; ++i) - if (v->_float >= info->ranges[i].start._float && - v->_float <= info->ranges[i].end._float) - return GL_TRUE; - break; + for (i = 0; i < info->nRanges; ++i) + if (v->_float >= info->ranges[i].start._float && + v->_float <= info->ranges[i].end._float) + return true; + break; + case DRI_STRING: + break; default: - assert (0); /* should never happen */ + assert (0); /* should never happen */ + } + return false; +} + +/** + * Print message to \c stderr if the \c LIBGL_DEBUG environment variable + * is set. + * + * Is called from the drivers. + * + * \param f \c printf like format string. + */ +static void +__driUtilMessage(const char *f, ...) +{ + va_list args; + const char *libgl_debug; + + libgl_debug=getenv("LIBGL_DEBUG"); + if (libgl_debug && !strstr(libgl_debug, "quiet")) { + fprintf(stderr, "libGL: "); + va_start(args, f); + vfprintf(stderr, f, args); + va_end(args); + fprintf(stderr, "\n"); } - return GL_FALSE; } /** \brief Output a warning message. */ @@ -427,15 +490,15 @@ static GLboolean checkValue (const driOptionValue *v, const driOptionInfo *info) #define XML_FATAL1(msg) do { \ fprintf (stderr, "Fatal error in %s line %d, column %d: "msg"\n", \ data->name, \ - (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentLineNumber(data->parser), \ (int) XML_GetCurrentColumnNumber(data->parser)); \ abort();\ } while (0) #define XML_FATAL(msg,args...) do { \ fprintf (stderr, "Fatal error in %s line %d, column %d: "msg"\n", \ data->name, \ - (int) XML_GetCurrentLineNumber(data->parser), \ - (int) XML_GetCurrentColumnNumber(data->parser), \ + (int) XML_GetCurrentLineNumber(data->parser), \ + (int) XML_GetCurrentColumnNumber(data->parser), \ args); \ abort();\ } while (0) @@ -445,11 +508,11 @@ struct OptInfoData { const char *name; XML_Parser parser; driOptionCache *cache; - GLboolean inDriInfo; - GLboolean inSection; - GLboolean inDesc; - GLboolean inOption; - GLboolean inEnum; + bool inDriInfo; + bool inSection; + bool inDesc; + bool inOption; + bool inEnum; int curOption; }; @@ -466,22 +529,24 @@ static const XML_Char *OptInfoElems[] = { * We're not actually interested in the data. Just make sure this is ok * for external configuration tools. */ -static void parseEnumAttr (struct OptInfoData *data, const XML_Char **attr) { - GLuint i; +static void +parseEnumAttr(struct OptInfoData *data, const XML_Char **attr) +{ + uint32_t i; const XML_Char *value = NULL, *text = NULL; driOptionValue v; - GLuint opt = data->curOption; + uint32_t opt = data->curOption; for (i = 0; attr[i]; i += 2) { - if (!strcmp (attr[i], "value")) value = attr[i+1]; - else if (!strcmp (attr[i], "text")) text = attr[i+1]; - else XML_FATAL("illegal enum attribute: %s.", attr[i]); + if (!strcmp (attr[i], "value")) value = attr[i+1]; + else if (!strcmp (attr[i], "text")) text = attr[i+1]; + else XML_FATAL("illegal enum attribute: %s.", attr[i]); } if (!value) XML_FATAL1 ("value attribute missing in enum."); if (!text) XML_FATAL1 ("text attribute missing in enum."); if (!parseValue (&v, data->cache->info[opt].type, value)) - XML_FATAL ("illegal enum value: %s.", value); + XML_FATAL ("illegal enum value: %s.", value); if (!checkValue (&v, &data->cache->info[opt])) - XML_FATAL ("enum value out of valid range: %s.", value); + XML_FATAL ("enum value out of valid range: %s.", value); } /** \brief Parse attributes of a description element. @@ -489,31 +554,35 @@ static void parseEnumAttr (struct OptInfoData *data, const XML_Char **attr) { * We're not actually interested in the data. Just make sure this is ok * for external configuration tools. */ -static void parseDescAttr (struct OptInfoData *data, const XML_Char **attr) { - GLuint i; +static void +parseDescAttr(struct OptInfoData *data, const XML_Char **attr) +{ + uint32_t i; const XML_Char *lang = NULL, *text = NULL; for (i = 0; attr[i]; i += 2) { - if (!strcmp (attr[i], "lang")) lang = attr[i+1]; - else if (!strcmp (attr[i], "text")) text = attr[i+1]; - else XML_FATAL("illegal description attribute: %s.", attr[i]); + if (!strcmp (attr[i], "lang")) lang = attr[i+1]; + else if (!strcmp (attr[i], "text")) text = attr[i+1]; + else XML_FATAL("illegal description attribute: %s.", attr[i]); } if (!lang) XML_FATAL1 ("lang attribute missing in description."); if (!text) XML_FATAL1 ("text attribute missing in description."); } /** \brief Parse attributes of an option element. */ -static void parseOptInfoAttr (struct OptInfoData *data, const XML_Char **attr) { +static void +parseOptInfoAttr(struct OptInfoData *data, const XML_Char **attr) +{ enum OptAttr {OA_DEFAULT = 0, OA_NAME, OA_TYPE, OA_VALID, OA_COUNT}; static const XML_Char *optAttr[] = {"default", "name", "type", "valid"}; const XML_Char *attrVal[OA_COUNT] = {NULL, NULL, NULL, NULL}; const char *defaultVal; driOptionCache *cache = data->cache; - GLuint opt, i; + uint32_t opt, i; for (i = 0; attr[i]; i += 2) { - GLuint attrName = bsearchStr (attr[i], optAttr, OA_COUNT); - if (attrName >= OA_COUNT) - XML_FATAL ("illegal option attribute: %s", attr[i]); - attrVal[attrName] = attr[i+1]; + uint32_t attrName = bsearchStr (attr[i], optAttr, OA_COUNT); + if (attrName >= OA_COUNT) + XML_FATAL ("illegal option attribute: %s", attr[i]); + attrVal[attrName] = attr[i+1]; } if (!attrVal[OA_NAME]) XML_FATAL1 ("name attribute missing in option."); if (!attrVal[OA_TYPE]) XML_FATAL1 ("type attribute missing in option."); @@ -521,149 +590,149 @@ static void parseOptInfoAttr (struct OptInfoData *data, const XML_Char **attr) { opt = findOption (cache, attrVal[OA_NAME]); if (cache->info[opt].name) - XML_FATAL ("option %s redefined.", attrVal[OA_NAME]); + XML_FATAL ("option %s redefined.", attrVal[OA_NAME]); data->curOption = opt; XSTRDUP (cache->info[opt].name, attrVal[OA_NAME]); if (!strcmp (attrVal[OA_TYPE], "bool")) - cache->info[opt].type = DRI_BOOL; + cache->info[opt].type = DRI_BOOL; else if (!strcmp (attrVal[OA_TYPE], "enum")) - cache->info[opt].type = DRI_ENUM; + cache->info[opt].type = DRI_ENUM; else if (!strcmp (attrVal[OA_TYPE], "int")) - cache->info[opt].type = DRI_INT; + cache->info[opt].type = DRI_INT; else if (!strcmp (attrVal[OA_TYPE], "float")) - cache->info[opt].type = DRI_FLOAT; + cache->info[opt].type = DRI_FLOAT; + else if (!strcmp (attrVal[OA_TYPE], "string")) + cache->info[opt].type = DRI_STRING; else - XML_FATAL ("illegal type in option: %s.", attrVal[OA_TYPE]); + XML_FATAL ("illegal type in option: %s.", attrVal[OA_TYPE]); defaultVal = getenv (cache->info[opt].name); if (defaultVal != NULL) { /* don't use XML_WARNING, we want the user to see this! */ - fprintf (stderr, - "ATTENTION: default value of option %s overridden by environment.\n", - cache->info[opt].name); + fprintf (stderr, + "ATTENTION: default value of option %s overridden by environment.\n", + cache->info[opt].name); } else - defaultVal = attrVal[OA_DEFAULT]; + defaultVal = attrVal[OA_DEFAULT]; if (!parseValue (&cache->values[opt], cache->info[opt].type, defaultVal)) - XML_FATAL ("illegal default value: %s.", defaultVal); + XML_FATAL ("illegal default value for %s: %s.", cache->info[opt].name, defaultVal); if (attrVal[OA_VALID]) { - if (cache->info[opt].type == DRI_BOOL) - XML_FATAL1 ("boolean option with valid attribute."); - if (!parseRanges (&cache->info[opt], attrVal[OA_VALID])) - XML_FATAL ("illegal valid attribute: %s.", attrVal[OA_VALID]); - if (!checkValue (&cache->values[opt], &cache->info[opt])) - XML_FATAL ("default value out of valid range '%s': %s.", - attrVal[OA_VALID], defaultVal); + if (cache->info[opt].type == DRI_BOOL) + XML_FATAL1 ("boolean option with valid attribute."); + if (!parseRanges (&cache->info[opt], attrVal[OA_VALID])) + XML_FATAL ("illegal valid attribute: %s.", attrVal[OA_VALID]); + if (!checkValue (&cache->values[opt], &cache->info[opt])) + XML_FATAL ("default value out of valid range '%s': %s.", + attrVal[OA_VALID], defaultVal); } else if (cache->info[opt].type == DRI_ENUM) { - XML_FATAL1 ("valid attribute missing in option (mandatory for enums)."); + XML_FATAL1 ("valid attribute missing in option (mandatory for enums)."); } else { - cache->info[opt].nRanges = 0; - cache->info[opt].ranges = NULL; + cache->info[opt].nRanges = 0; + cache->info[opt].ranges = NULL; } } /** \brief Handler for start element events. */ -static void optInfoStartElem (void *userData, const XML_Char *name, - const XML_Char **attr) { +static void +optInfoStartElem(void *userData, const XML_Char *name, const XML_Char **attr) +{ struct OptInfoData *data = (struct OptInfoData *)userData; enum OptInfoElem elem = bsearchStr (name, OptInfoElems, OI_COUNT); switch (elem) { case OI_DRIINFO: - if (data->inDriInfo) - XML_FATAL1 ("nested elements."); - if (attr[0]) - XML_FATAL1 ("attributes specified on element."); - data->inDriInfo = GL_TRUE; - break; + if (data->inDriInfo) + XML_FATAL1 ("nested elements."); + if (attr[0]) + XML_FATAL1 ("attributes specified on element."); + data->inDriInfo = true; + break; case OI_SECTION: - if (!data->inDriInfo) - XML_FATAL1 ("
must be inside ."); - if (data->inSection) - XML_FATAL1 ("nested
elements."); - if (attr[0]) - XML_FATAL1 ("attributes specified on
element."); - data->inSection = GL_TRUE; - break; + if (!data->inDriInfo) + XML_FATAL1 ("
must be inside ."); + if (data->inSection) + XML_FATAL1 ("nested
elements."); + if (attr[0]) + XML_FATAL1 ("attributes specified on
element."); + data->inSection = true; + break; case OI_DESCRIPTION: - if (!data->inSection && !data->inOption) - XML_FATAL1 (" must be inside or inDesc) - XML_FATAL1 ("nested elements."); - data->inDesc = GL_TRUE; - parseDescAttr (data, attr); - break; + if (!data->inSection && !data->inOption) + XML_FATAL1 (" must be inside or inDesc) + XML_FATAL1 ("nested elements."); + data->inDesc = true; + parseDescAttr (data, attr); + break; case OI_OPTION: - if (!data->inSection) - XML_FATAL1 ("