Mesa (master): glsl: Avoid variable length arrays.
Jose Fonseca
jrfonseca at kemper.freedesktop.org
Fri Jul 12 08:31:11 UTC 2013
Module: Mesa
Branch: master
Commit: 649ef4da30e23f077087326a6a9116759f1d9dd3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=649ef4da30e23f077087326a6a9116759f1d9dd3
Author: José Fonseca <jfonseca at vmware.com>
Date: Fri Jul 12 09:27:22 2013 +0100
glsl: Avoid variable length arrays.
They are a non-standard GCC extension that's not widely supported by
other C/C++ compilers.
Use a dynamic array instead.
Trivial. Should fix the MSVC build.
---
src/glsl/glsl_symbol_table.cpp | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp
index 0bea536..4c96620 100644
--- a/src/glsl/glsl_symbol_table.cpp
+++ b/src/glsl/glsl_symbol_table.cpp
@@ -175,13 +175,21 @@ bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
}
-bool glsl_symbol_table::add_type_ast(const char *name, const class ast_type_specifier *a)
+static char *make_ast_name(const char *name)
{
- symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(a);
- char ast_name[strlen("#ast.") + strlen(name) + 1];
+ char *ast_name = new char[strlen("#ast.") + strlen(name) + 1];
strcpy(ast_name, "#ast.");
strcat(ast_name + strlen("#ast."), name);
- return _mesa_symbol_table_add_symbol(table, -1, ast_name, entry) == 0;
+ return ast_name;
+}
+
+bool glsl_symbol_table::add_type_ast(const char *name, const class ast_type_specifier *a)
+{
+ symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(a);
+ char *ast_name = make_ast_name(name);
+ bool ret = _mesa_symbol_table_add_symbol(table, -1, ast_name, entry) == 0;
+ delete [] ast_name;
+ return ret;
}
bool glsl_symbol_table::add_interface(const char *name, const glsl_type *i,
@@ -237,10 +245,9 @@ const glsl_type *glsl_symbol_table::get_type(const char *name)
const class ast_type_specifier *glsl_symbol_table::get_type_ast(const char *name)
{
- char ast_name[strlen("#ast.") + strlen(name) + 1];
- strcpy(ast_name, "#ast.");
- strcat(ast_name + strlen("#ast."), name);
+ char *ast_name = make_ast_name(name);
symbol_table_entry *entry = get_entry(ast_name);
+ delete [] ast_name;
return entry != NULL ? entry->a : NULL;
}
More information about the mesa-commit
mailing list