glsl: Consistently use length-based ralloc string functions for info_log.
authorCarl Worth <cworth@cworth.org>
Sat, 9 Jun 2012 16:45:56 +0000 (09:45 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 26 Jun 2012 22:20:53 +0000 (15:20 -0700)
Commit b823b99ec0f13af257dcd885f436a4d294c6222a switched from using
functions such as ralloc_asprintf and ralloc_strcat to
ralloc_asprintf_rewrite_tail. This change maintains the string's
length as a aparamter that is updated by the ralloc functions (rather
than recomputing it with strlen over and over).

However, the change failed to updated two locations (glcpp_error and
glcpp_warning), with the result that the string's length wasn't
updated by these calls. Then, subsequent calls to other
ralloc_asprintf_rewrite_tail would overwrite the text appended by
glcpp_error.

This commit fixes the two missing updates, and restores line numbers
to the output of glcpp error messages, (as noticed by a glcpp unit
test case that has been failing since the above-mentioned commit).

Signed-off-by: Carl Worth <cworth@cworth.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/glcpp/pp.c

index 3640896a2c28dcbfac2d3bf0c6db9d0aa233609f..9170d14a3047e80f7d914a4279aeec03392a947f 100644 (file)
@@ -33,15 +33,20 @@ glcpp_error (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...)
        va_list ap;
 
        parser->error = 1;
-       ralloc_asprintf_append(&parser->info_log, "%u:%u(%u): "
-                                                 "preprocessor error: ",
-                                                 locp->source,
-                                                 locp->first_line,
-                                                 locp->first_column);
+       ralloc_asprintf_rewrite_tail(&parser->info_log,
+                                    &parser->info_log_length,
+                                    "%u:%u(%u): "
+                                    "preprocessor error: ",
+                                    locp->source,
+                                    locp->first_line,
+                                    locp->first_column);
        va_start(ap, fmt);
-       ralloc_vasprintf_append(&parser->info_log, fmt, ap);
+       ralloc_vasprintf_rewrite_tail(&parser->info_log,
+                                     &parser->info_log_length,
+                                     fmt, ap);
        va_end(ap);
-       ralloc_strcat(&parser->info_log, "\n");
+       ralloc_asprintf_rewrite_tail(&parser->info_log,
+                                    &parser->info_log_length, "\n");
 }
 
 void
@@ -49,15 +54,20 @@ glcpp_warning (YYLTYPE *locp, glcpp_parser_t *parser, const char *fmt, ...)
 {
        va_list ap;
 
-       ralloc_asprintf_append(&parser->info_log, "%u:%u(%u): "
-                                                 "preprocessor warning: ",
-                                                 locp->source,
-                                                 locp->first_line,
-                                                 locp->first_column);
+       ralloc_asprintf_rewrite_tail(&parser->info_log,
+                                    &parser->info_log_length,
+                                    "%u:%u(%u): "
+                                    "preprocessor warning: ",
+                                    locp->source,
+                                    locp->first_line,
+                                    locp->first_column);
        va_start(ap, fmt);
-       ralloc_vasprintf_append(&parser->info_log, fmt, ap);
+       ralloc_vasprintf_rewrite_tail(&parser->info_log,
+                                     &parser->info_log_length,
+                                     fmt, ap);
        va_end(ap);
-       ralloc_strcat(&parser->info_log, "\n");
+       ralloc_asprintf_rewrite_tail(&parser->info_log,
+                                    &parser->info_log_length, "\n");
 }
 
 /* Searches backwards for '^ *#' from a given starting point. */