On 28/09/15 09:09, Samuel Iglesias Gonsalvez wrote:
Fix SCons MinGW build error:
Compiling src/mesa/main/shader_query.cpp ...
src/mesa/main/shader_query.cpp: In function ‘char* get_top_level_name(const
char*)’:
src/mesa/main/shader_query.cpp:841:34: error: ‘strndup’ was not declared in
this scope
return strndup(name, name_size);
^
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92124
Signed-off-by: Samuel Iglesias Gonsalvez <[email protected]>
Thanks for looking into this.
---
src/mesa/main/shader_query.cpp | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/src/mesa/main/shader_query.cpp b/src/mesa/main/shader_query.cpp
index e020dce..7eecb39 100644
--- a/src/mesa/main/shader_query.cpp
+++ b/src/mesa/main/shader_query.cpp
@@ -838,18 +838,27 @@ get_top_level_name(const char *name)
else
name_size = first_square_bracket - name;
- return strndup(name, name_size);
+ char *result = (char *) malloc((name_size + 1) * sizeof(char));
+ strncpy(result, name, name_size);
+ result[name_size] = '\0';
+ return result;
I think we should add a strndup inline implementation in a shared header
somewhere. We should avoid having the strndup reimplemented repeatedly,
as that is error prone.
And that implementation should malloc the length of the resulting string
plus one, not the max_size + 1 to avoid wasting memory if later strndup
is invoked with a max_size much larger than the incoming string.
}
static char*
get_var_name(const char *name)
{
const char *first_dot = strchr(name, '.');
+ char *result;
- if (!first_dot)
- return strdup(name);
-
Both MinGW and MSVC have strdup. They just lack strndup.
- return strndup(first_dot+1, strlen(first_dot) - 1);
I think we could just return `strdup(first_dot)`.
+ if (!first_dot) {
+ result = (char *) malloc(strlen(name) * sizeof(char));
+ return strcpy(result, name);
+ }
+ int var_name_size = strlen(first_dot) - 1;
+ result = (char *) malloc((var_name_size + 1) * sizeof(char));
+ strncpy(result, first_dot+1, var_name_size);
+ result[var_name_size] = '\0';
+ return result;
}
static GLint
Jose
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev