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:
Philip Withnall
2024-01-26 09:20:07 +00:00
parent 48d9f356c3
commit 501ff95cea
4 changed files with 18 additions and 7 deletions

View File

@@ -1601,7 +1601,7 @@ gi_ir_node_build_typelib (GIIrNode *node,
blob->writable = field->writable;
blob->reserved = 0;
blob->bits = 0;
if (field->offset >= 0)
if (field->offset_state == GI_IR_OFFSETS_COMPUTED)
blob->struct_offset = field->offset;
else
blob->struct_offset = 0xFFFF; /* mark as unknown */