mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-01 15:03:39 +02:00
girnode: Improve int types in GIIrNodeField
`GIIrNodeField` is built dynamically at runtime (rather than being
mmapped from disk), so its types can accurately reflect their runtime
semantics, rather than an on-disk format.
As part of this, switch from `atoi()` to `g_ascii_string_to_unsigned()`
for parsing the relevant fields from a GIR XML file. This means we now
get error handling for invalid integers.
This also includes some offset validity changes which were forgotten
from commit 515b3fc1dc
.
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3155
This commit is contained in:
@@ -1366,6 +1366,7 @@ start_field (GMarkupParseContext *context,
|
||||
GIIrNodeField *field;
|
||||
ParseState target_state;
|
||||
gboolean introspectable;
|
||||
guint64 parsed_bits;
|
||||
|
||||
switch (ctx->state)
|
||||
{
|
||||
@@ -1428,10 +1429,15 @@ start_field (GMarkupParseContext *context,
|
||||
field->readable = readable == NULL || strcmp (readable, "0") == 0;
|
||||
field->writable = writable != NULL && strcmp (writable, "1") == 0;
|
||||
|
||||
if (bits)
|
||||
field->bits = atoi (bits);
|
||||
else
|
||||
if (bits == NULL)
|
||||
field->bits = 0;
|
||||
else if (g_ascii_string_to_unsigned (bits, 10, 0, G_MAXUINT, &parsed_bits, error))
|
||||
field->bits = parsed_bits;
|
||||
else
|
||||
{
|
||||
gi_ir_node_free ((GIIrNode *) field);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (CURRENT_NODE (ctx)->type)
|
||||
{
|
||||
|
Reference in New Issue
Block a user