[Mesa-dev] [PATCH 2/3] mesa: Add _mesa_enum_to_string2()

Chad Versace chad at kiwitree.net
Thu Aug 11 17:11:29 UTC 2016


The new function is identical to _mesa_enum_to_string(), except that it
returns false if the given number is an invalid enum. Bundling
validation and lookup into a single function allows us to do both with
a single lookup into the enum table.

Cc: Haixia Shi <hshi at chromium.org>
Change-Id: I83d9a6e53223d1a971cf8dc22cb34b05b48d7889
---
 src/mapi/glapi/gen/gl_enums.py | 20 ++++++++++++++++----
 src/mesa/main/enums.h          |  2 ++
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/mapi/glapi/gen/gl_enums.py b/src/mapi/glapi/gen/gl_enums.py
index 4fc43ab..af21aaf 100644
--- a/src/mapi/glapi/gen/gl_enums.py
+++ b/src/mapi/glapi/gen/gl_enums.py
@@ -89,6 +89,17 @@ static char token_tmp[20];
  */
 const char *_mesa_enum_to_string( int nr )
 {
+   const char *str;
+   _mesa_enum_to_string2(nr, &str);
+   return str;
+}
+
+/**
+ * Identical to _mesa_enum_to_string(), except that this function returns false
+ * when the number is an invalid enum.
+ */
+bool _mesa_enum_to_string2(int nr, const char **str)
+{
    enum_elt *elt;
 
    elt = bsearch(& nr, enum_string_table_offsets,
@@ -97,13 +108,14 @@ const char *_mesa_enum_to_string( int nr )
                  (cfunc) compar_nr);
 
    if (elt != NULL) {
-      return &enum_string_table[elt->offset];
-   }
-   else {
+      *str = &enum_string_table[elt->offset];
+      return true;
+   } else {
       /* this is not re-entrant safe, no big deal here */
       _mesa_snprintf(token_tmp, sizeof(token_tmp) - 1, "0x%x", nr);
       token_tmp[sizeof(token_tmp) - 1] = '\\0';
-      return token_tmp;
+      *str = token_tmp;
+      return false;
    }
 }
 
diff --git a/src/mesa/main/enums.h b/src/mesa/main/enums.h
index 0e18cd4..ae804d6 100644
--- a/src/mesa/main/enums.h
+++ b/src/mesa/main/enums.h
@@ -36,6 +36,7 @@
 #ifndef _ENUMS_H_
 #define _ENUMS_H_
 
+#include <stdbool.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -43,6 +44,7 @@ extern "C" {
 
 
 extern const char *_mesa_enum_to_string( int nr );
+bool _mesa_enum_to_string2(int nr, const char **str);
 
 /* Get the name of an enum given that it is a primitive type.  Avoids
  * GL_FALSE/GL_POINTS ambiguity and others.
-- 
2.9.2



More information about the mesa-dev mailing list