mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-28 06:20:30 +00:00
Allocate sufficient space for string buffer
* input-scrub.c (input_scrub_include_sb): Use sb_build to allocate sufficient space for from_sb. Use sb_terminate to terminate string. * read.c (read_a_source_file): Use sb_build to allocate sufficient space and replace sb_add_string with sb_add_buffer. (s_macro): Likewise. (input_scrub_insert_line): Likewise. (s_irp): Use sb_build to allocate sufficient space. (do_repeat): Use sb_build to allocate sufficient space for many. * sb.c (sb_build): Remove static. * sb.h (sb_build): New prototype.
This commit is contained in:
parent
5197bfb548
commit
d2ae702c46
@ -1,3 +1,18 @@
|
||||
2012-06-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* input-scrub.c (input_scrub_include_sb): Use sb_build to
|
||||
allocate sufficient space for from_sb. Use sb_terminate to
|
||||
terminate string.
|
||||
* read.c (read_a_source_file): Use sb_build to allocate
|
||||
sufficient space and replace sb_add_string with sb_add_buffer.
|
||||
(s_macro): Likewise.
|
||||
(input_scrub_insert_line): Likewise.
|
||||
(s_irp): Use sb_build to allocate sufficient space.
|
||||
(do_repeat): Use sb_build to allocate sufficient space
|
||||
for many.
|
||||
* sb.c (sb_build): Remove static.
|
||||
* sb.h (sb_build): New prototype.
|
||||
|
||||
2012-06-09 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* sb.c: Include limits.h.
|
||||
|
@ -264,6 +264,8 @@ input_scrub_include_file (char *filename, char *position)
|
||||
void
|
||||
input_scrub_include_sb (sb *from, char *position, int is_expansion)
|
||||
{
|
||||
int newline;
|
||||
|
||||
if (macro_nest > max_macro_nest)
|
||||
as_fatal (_("macros nested too deeply"));
|
||||
++macro_nest;
|
||||
@ -277,9 +279,11 @@ input_scrub_include_sb (sb *from, char *position, int is_expansion)
|
||||
|
||||
next_saved_file = input_scrub_push (position);
|
||||
|
||||
sb_new (&from_sb);
|
||||
/* Allocate sufficient space: from->len + optional newline. */
|
||||
newline = from->len >= 1 && from->ptr[0] != '\n';
|
||||
sb_build (&from_sb, from->len + newline);
|
||||
from_sb_is_expansion = is_expansion;
|
||||
if (from->len >= 1 && from->ptr[0] != '\n')
|
||||
if (newline)
|
||||
{
|
||||
/* Add the sentinel required by read.c. */
|
||||
sb_add_char (&from_sb, '\n');
|
||||
@ -288,8 +292,7 @@ input_scrub_include_sb (sb *from, char *position, int is_expansion)
|
||||
|
||||
/* 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_terminate (&from_sb);
|
||||
|
||||
sb_index = 1;
|
||||
|
||||
|
25
gas/read.c
25
gas/read.c
@ -1181,7 +1181,6 @@ read_a_source_file (char *name)
|
||||
bump_line_counters ();
|
||||
s += 4;
|
||||
|
||||
sb_new (&sbuf);
|
||||
ends = strstr (s, "#NO_APP\n");
|
||||
|
||||
if (!ends)
|
||||
@ -1262,7 +1261,9 @@ read_a_source_file (char *name)
|
||||
actual macro expansion (possibly nested) and other
|
||||
input expansion work. Beware that in messages, line
|
||||
numbers and possibly file names will be incorrect. */
|
||||
sb_add_string (&sbuf, new_buf);
|
||||
new_length = strlen (new_buf);
|
||||
sb_build (&sbuf, new_length);
|
||||
sb_add_buffer (&sbuf, new_buf, new_length);
|
||||
input_scrub_include_sb (&sbuf, input_line_pointer, 0);
|
||||
sb_kill (&sbuf);
|
||||
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
|
||||
@ -2437,8 +2438,8 @@ s_irp (int irpc)
|
||||
|
||||
as_where (&file, &line);
|
||||
|
||||
sb_new (&s);
|
||||
eol = find_end_of_line (input_line_pointer, 0);
|
||||
sb_build (&s, eol - input_line_pointer);
|
||||
sb_add_buffer (&s, input_line_pointer, eol - input_line_pointer);
|
||||
input_line_pointer = eol;
|
||||
|
||||
@ -2773,17 +2774,20 @@ s_macro (int ignore ATTRIBUTE_UNUSED)
|
||||
|
||||
as_where (&file, &line);
|
||||
|
||||
sb_new (&s);
|
||||
eol = find_end_of_line (input_line_pointer, 0);
|
||||
sb_build (&s, eol - input_line_pointer);
|
||||
sb_add_buffer (&s, input_line_pointer, eol - input_line_pointer);
|
||||
input_line_pointer = eol;
|
||||
|
||||
if (line_label != NULL)
|
||||
{
|
||||
sb label;
|
||||
size_t len;
|
||||
|
||||
sb_new (&label);
|
||||
sb_add_string (&label, S_GET_NAME (line_label));
|
||||
name = S_GET_NAME (line_label);
|
||||
len = strlen (name);
|
||||
sb_build (&label, len);
|
||||
sb_add_buffer (&label, name, len);
|
||||
err = define_macro (0, &s, &label, get_macro_line_sb, file, line, &name);
|
||||
sb_kill (&label);
|
||||
}
|
||||
@ -3207,7 +3211,7 @@ do_repeat (int count, const char *start, const char *end)
|
||||
return;
|
||||
}
|
||||
|
||||
sb_new (&many);
|
||||
sb_build (&many, count * one.len);
|
||||
while (count-- > 0)
|
||||
sb_add_sb (&many, &one);
|
||||
|
||||
@ -3247,7 +3251,7 @@ do_repeat_with_expander (int count,
|
||||
char * sub;
|
||||
sb processed;
|
||||
|
||||
sb_new (& processed);
|
||||
sb_build (& processed, one.len);
|
||||
sb_add_sb (& processed, & one);
|
||||
sub = strstr (processed.ptr, expander);
|
||||
len = sprintf (sub, "%d", count);
|
||||
@ -6167,8 +6171,9 @@ void
|
||||
input_scrub_insert_line (const char *line)
|
||||
{
|
||||
sb newline;
|
||||
sb_new (&newline);
|
||||
sb_add_string (&newline, line);
|
||||
size_t len = strlen (line);
|
||||
sb_build (&newline, len);
|
||||
sb_add_buffer (&newline, line, len);
|
||||
input_scrub_include_sb (&newline, input_line_pointer, 0);
|
||||
sb_kill (&newline);
|
||||
buffer_limit = input_scrub_next_buffer (&input_line_pointer);
|
||||
|
2
gas/sb.c
2
gas/sb.c
@ -57,7 +57,7 @@ static void sb_check (sb *, size_t);
|
||||
|
||||
/* Initializes an sb. */
|
||||
|
||||
static void
|
||||
void
|
||||
sb_build (sb *ptr, size_t size)
|
||||
{
|
||||
ptr->ptr = xmalloc (size + 1);
|
||||
|
Loading…
Reference in New Issue
Block a user