On 17.08.2017 04:20, QuRyu wrote:
After changing the type of drirc values, the parser will be unable to
recognize xml files before the change. To achieve backward compatbility,

Spelling: compatibility

The commit message is good, though I would say "... will be unable to recognize xml files *from* before the change...". I believe that makes it a bit easier to read.

Some more comments about the code itself inline below.


the parser is relaxed to recognize boolean type options with enum values.
---
  src/util/xmlconfig.c | 22 ++++++++++++++++++++--
  1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/util/xmlconfig.c b/src/util/xmlconfig.c
index d3f47ec..2999f24 100644
--- a/src/util/xmlconfig.c
+++ b/src/util/xmlconfig.c
@@ -317,8 +317,26 @@ parseValue(driOptionValue *v, driOptionType type, const 
XML_Char *string)
              v->_bool = true;
              tail = string + 4;
          }
-        else
-            return false;
+        else {
+            /** Some drirc options, such as pp_shalde, were formerly enum 
values.
+             *  Now that they have been turned into boolean values, to achieve
+             *  backward compatbility relax the check here a little bit */

Good comment, but it should start with a plain /*, i.e. no double-stars. The double-stars are used for Doxygen comments only (they can be used to generate documentation of functions, variables, etc.).

Also, fix the spelling of pp_celshade and compatibility.


+            XML_Char *start = string;
+            int value = strToI(string, &tail, 0);
+            if (tail == start) {
+                /* no enum value found  */
+                string = start;
+                return false;
+            } else {
+                if (value == 1)
+                    v->_bool = true;
+                else if (value == 0)
+                    v->_bool = false;
+                else
+                    return false; /* wrong value here */
+            }

I believe you can (and therefore should ;-)) simplify this piece of code, because there is code after the switch statement which does all the required error checking. Basically, condensing the code to something like:

  int value = strToI(string, &tail, 0);
  if (value == 1)
    v->_bool = true;
  else if (value == 0)
    v->_bool = false;
  else
    return false;

should be enough. All the other error conditions, like empty string, or garbage after the tail, are handled below the switch statement.

Cheers,
Nicolai

+       }
+
          break;
        case DRI_ENUM: /* enum is just a special integer */
        case DRI_INT:



--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to