From 354e99ce386a338ed6b7288fdec8b6ca13ce8946 Mon Sep 17 00:00:00 2001 From: Alexandre Petit-Bianco Date: Wed, 6 Sep 2000 02:37:09 +0000 Subject: 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 --- gcc/java/ChangeLog | 5 +++++ gcc/java/parse.y | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) (limited to 'gcc/java') diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index f21e2a0..7fe0183 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 4676153..d37a7f1b 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; } -- cgit v1.1