mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-08-30 21:15:16 +00:00
bison: port to recent glibc / Gnulib
* src/muscle-tab.c (muscle_grow, muscle_syncline_grow) (muscle_pair_list_grow, muscle_boundary_grow, string_decode) (define_directive): Use char *, not char const *, for pointers that are passed to obstack_free or are stored through. This avoids undefined behavior in C.
This commit is contained in:
+7
-8
@@ -193,7 +193,7 @@ muscle_grow (const char *key, const char *val,
|
|||||||
obstack_sgrow (&muscle_obstack, terminator);
|
obstack_sgrow (&muscle_obstack, terminator);
|
||||||
|
|
||||||
{
|
{
|
||||||
char const *new_val = obstack_finish0 (&muscle_obstack);
|
char *new_val = obstack_finish0 (&muscle_obstack);
|
||||||
entry->value = entry->storage = xstrdup (new_val);
|
entry->value = entry->storage = xstrdup (new_val);
|
||||||
obstack_free (&muscle_obstack, new_val);
|
obstack_free (&muscle_obstack, new_val);
|
||||||
}
|
}
|
||||||
@@ -211,7 +211,7 @@ muscle_syncline_grow (char const *key, location loc)
|
|||||||
obstack_quote (&muscle_obstack,
|
obstack_quote (&muscle_obstack,
|
||||||
quotearg_style (c_quoting_style, map_file_name (loc.start.file)));
|
quotearg_style (c_quoting_style, map_file_name (loc.start.file)));
|
||||||
obstack_sgrow (&muscle_obstack, ")dnl\n[");
|
obstack_sgrow (&muscle_obstack, ")dnl\n[");
|
||||||
char const *extension = obstack_finish0 (&muscle_obstack);
|
char *extension = obstack_finish0 (&muscle_obstack);
|
||||||
muscle_grow (key, extension, "", "");
|
muscle_grow (key, extension, "", "");
|
||||||
obstack_free (&muscle_obstack, extension);
|
obstack_free (&muscle_obstack, extension);
|
||||||
}
|
}
|
||||||
@@ -239,7 +239,7 @@ muscle_pair_list_grow (const char *muscle,
|
|||||||
obstack_sgrow (&muscle_obstack, ", ");
|
obstack_sgrow (&muscle_obstack, ", ");
|
||||||
obstack_quote (&muscle_obstack, a2);
|
obstack_quote (&muscle_obstack, a2);
|
||||||
obstack_sgrow (&muscle_obstack, "]");
|
obstack_sgrow (&muscle_obstack, "]");
|
||||||
char const *pair = obstack_finish0 (&muscle_obstack);
|
char *pair = obstack_finish0 (&muscle_obstack);
|
||||||
muscle_grow (muscle, pair, ",\n", "");
|
muscle_grow (muscle, pair, ",\n", "");
|
||||||
obstack_free (&muscle_obstack, pair);
|
obstack_free (&muscle_obstack, pair);
|
||||||
}
|
}
|
||||||
@@ -275,7 +275,7 @@ muscle_boundary_grow (char const *key, boundary bound)
|
|||||||
obstack_sgrow (&muscle_obstack, "[[");
|
obstack_sgrow (&muscle_obstack, "[[");
|
||||||
obstack_escape (&muscle_obstack, bound.file);
|
obstack_escape (&muscle_obstack, bound.file);
|
||||||
obstack_printf (&muscle_obstack, ":%d.%d@@%d]]", bound.line, bound.column, bound.byte);
|
obstack_printf (&muscle_obstack, ":%d.%d@@%d]]", bound.line, bound.column, bound.byte);
|
||||||
char const *extension = obstack_finish0 (&muscle_obstack);
|
char *extension = obstack_finish0 (&muscle_obstack);
|
||||||
muscle_grow (key, extension, "", "");
|
muscle_grow (key, extension, "", "");
|
||||||
obstack_free (&muscle_obstack, extension);
|
obstack_free (&muscle_obstack, extension);
|
||||||
}
|
}
|
||||||
@@ -326,7 +326,7 @@ string_decode (char const *key)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (*value++);
|
} while (*value++);
|
||||||
char const *value_decoded = obstack_finish (&muscle_obstack);
|
char *value_decoded = obstack_finish (&muscle_obstack);
|
||||||
char *res = xstrdup (value_decoded);
|
char *res = xstrdup (value_decoded);
|
||||||
obstack_free (&muscle_obstack, value_decoded);
|
obstack_free (&muscle_obstack, value_decoded);
|
||||||
return res;
|
return res;
|
||||||
@@ -407,16 +407,15 @@ define_directive (char const *assignment,
|
|||||||
muscle_kind kind,
|
muscle_kind kind,
|
||||||
char const *value)
|
char const *value)
|
||||||
{
|
{
|
||||||
char *eq = strchr (assignment, '=');
|
|
||||||
char const *fmt
|
char const *fmt
|
||||||
= eq || !value || !*value ? "%%define %s"
|
= strchr (assignment, '=') || !value || !*value ? "%%define %s"
|
||||||
: kind == muscle_code ? "%%define %s {%s}"
|
: kind == muscle_code ? "%%define %s {%s}"
|
||||||
: kind == muscle_string ? "%%define %s \"%s\""
|
: kind == muscle_string ? "%%define %s \"%s\""
|
||||||
: "%%define %s %s";
|
: "%%define %s %s";
|
||||||
char *res = xmalloc (strlen (fmt) + strlen (assignment)
|
char *res = xmalloc (strlen (fmt) + strlen (assignment)
|
||||||
+ (value ? strlen (value) : 0));
|
+ (value ? strlen (value) : 0));
|
||||||
sprintf (res, fmt, assignment, value);
|
sprintf (res, fmt, assignment, value);
|
||||||
eq = strchr (res, '=');
|
char *eq = strchr (res, '=');
|
||||||
if (eq)
|
if (eq)
|
||||||
*eq = eq[1] ? ' ' : '\0';
|
*eq = eq[1] ? ' ' : '\0';
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
Reference in New Issue
Block a user