From: Alexandre Petit-Bianco Date: Wed, 6 Sep 2000 02:37:09 +0000 (+0000) Subject: parse.y (do_merge_string_cste): New locals. X-Git-Tag: prereleases/libstdc++-2.92~4246 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=354e99ce386a338ed6b7288fdec8b6ca13ce8946;p=thirdparty%2Fgcc.git parse.y (do_merge_string_cste): New locals. 2000-08-11 Alexandre Petit-Bianco * parse.y (do_merge_string_cste): New locals. Create new STRING_CSTs each time, use memcpy. Fixes gcj/311 (Fixes gcj/311: http://gcc.gnu.org/ml/gcc-patches/2000-09/msg00144.html http://sources.redhat.com/ml/java-prs/2000-q3/msg00116.html) From-SVN: r36176 --- diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index f21e2a03286f..7fe01831e138 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -6,6 +6,11 @@ compression_method fields. * zextract.c (read_zip_archive): Collect file compression info. +2000-08-11 Alexandre Petit-Bianco + + * parse.y (do_merge_string_cste): New locals. Create new + STRING_CSTs each time, use memcpy. Fixes gcj/311. + 2000-08-07 Hans Boehm * boehm.c (mark_reference_fields): Set marking bits for all words in diff --git a/gcc/java/parse.y b/gcc/java/parse.y index 4676153b92ef..d37a7f1b32b4 100644 --- a/gcc/java/parse.y +++ b/gcc/java/parse.y @@ -12892,20 +12892,26 @@ do_merge_string_cste (cste, string, string_len, after) const char *string; int string_len, after; { - int len = TREE_STRING_LENGTH (cste) + string_len; const char *old = TREE_STRING_POINTER (cste); + int old_len = TREE_STRING_LENGTH (cste); + int len = old_len + string_len; + char *new; + + cste = make_node (STRING_CST); TREE_STRING_LENGTH (cste) = len; - TREE_STRING_POINTER (cste) = obstack_alloc (expression_obstack, len+1); + new = TREE_STRING_POINTER (cste) = obstack_alloc (expression_obstack, len+1); + if (after) { - strcpy (TREE_STRING_POINTER (cste), string); - strcat (TREE_STRING_POINTER (cste), old); + memcpy (new, string, string_len); + memcpy (&new [string_len], old, old_len); } else { - strcpy (TREE_STRING_POINTER (cste), old); - strcat (TREE_STRING_POINTER (cste), string); + memcpy (new, old, old_len); + memcpy (&new [old_len], string, string_len); } + new [len] = '\0'; return cste; }