X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Finput-scrub.c;h=e1ff5cc0a505d48840692c326811709ce19938b4;hb=69b8ea4abd8a894f62dade3c5bb50291c82f3e0d;hp=21a46514545cb2695dd10d4a27c641c0e24d3080;hpb=ec2655a6a75bc61d21e6f8ddc1e9f9027a8914dd;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/input-scrub.c b/gas/input-scrub.c index 21a4651454..e1ff5cc0a5 100644 --- a/gas/input-scrub.c +++ b/gas/input-scrub.c @@ -1,6 +1,6 @@ /* input_scrub.c - Break up input buffers into whole numbers of lines. Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 2000, 2001, 2003, 2006, 2007 + 2000, 2001, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -165,7 +165,8 @@ input_scrub_push (char *saved_position) buffer_length = input_file_buffer_size (); sb_index = -1; - buffer_start = xmalloc ((BEFORE_SIZE + buffer_length + buffer_length + AFTER_SIZE)); + buffer_start = (char *) xmalloc ((BEFORE_SIZE + buffer_length + + buffer_length + AFTER_SIZE)); memcpy (buffer_start, BEFORE_STRING, (int) BEFORE_SIZE); return saved; @@ -209,7 +210,8 @@ input_scrub_begin (void) buffer_length = input_file_buffer_size (); - buffer_start = xmalloc ((BEFORE_SIZE + buffer_length + buffer_length + AFTER_SIZE)); + buffer_start = (char *) xmalloc ((BEFORE_SIZE + buffer_length + + buffer_length + AFTER_SIZE)); memcpy (buffer_start, BEFORE_STRING, (int) BEFORE_SIZE); /* Line number things. */ @@ -283,6 +285,12 @@ input_scrub_include_sb (sb *from, char *position, int is_expansion) sb_add_char (&from_sb, '\n'); } sb_scrub_and_add_sb (&from_sb, from); + + /* Make sure the parser looks at defined contents when it scans for + e.g. end-of-line at the end of a macro. */ + sb_add_char (&from_sb, 0); + from_sb.len--; + sb_index = 1; /* These variables are reset by input_scrub_push. Restore them @@ -335,8 +343,8 @@ input_scrub_next_buffer (char **bufp) if (partial_size) { - memcpy (buffer_start + BEFORE_SIZE, partial_where, - (unsigned int) partial_size); + memmove (buffer_start + BEFORE_SIZE, partial_where, + (unsigned int) partial_size); memcpy (buffer_start + BEFORE_SIZE, save_source, AFTER_SIZE); } limit = input_file_give_next_buffer (buffer_start @@ -357,10 +365,10 @@ input_scrub_next_buffer (char **bufp) limoff = limit - buffer_start; buffer_length += input_file_buffer_size (); - buffer_start = xrealloc (buffer_start, - (BEFORE_SIZE - + 2 * buffer_length - + AFTER_SIZE)); + buffer_start = (char *) xrealloc (buffer_start, + (BEFORE_SIZE + + 2 * buffer_length + + AFTER_SIZE)); *bufp = buffer_start + BEFORE_SIZE; limit = input_file_give_next_buffer (buffer_start + limoff);