diff options
author | Owen W. Taylor <otaylor@fishsoup.net> | 2010-09-14 11:59:03 -0400 |
---|---|---|
committer | Owen W. Taylor <otaylor@fishsoup.net> | 2010-11-01 17:25:45 -0400 |
commit | 8916db0a3831cb5e6c3b714125f7596f43d6aa6a (patch) | |
tree | c4d523a925a666be85bfdaea804407ca782778f7 /girepository/girwriter.c | |
parent | 29ec4294d9232dcfd7cfec4e20c0e302a5ff3e80 (diff) | |
download | gobject-introspection-8916db0a3831cb5e6c3b714125f7596f43d6aa6a.tar.gz |
Handle enumerations with the full range of signed and unsigned values
The C compiler will pick an enumeration type that accomodates the specified
values for the enumeration, so ignoring 64-bit enumerations, we can
have enumeration values from MININT32 to MAXUINT32. To handle this properly:
- Use gint64 for holding eumeration values when scanning
- Add a 'unsigned_value' bit to ValueBlob so we can distinguish the
int32 vs. uint32 cases in the typelib
- Change the return value of g_value_info_get_value() to gint64.
https://bugzilla.gnome.org/show_bug.cgi?id=629704
Diffstat (limited to 'girepository/girwriter.c')
-rw-r--r-- | girepository/girwriter.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/girepository/girwriter.c b/girepository/girwriter.c index 8c4fa2c3..e90799c1 100644 --- a/girepository/girwriter.c +++ b/girepository/girwriter.c @@ -704,7 +704,8 @@ write_value_info (const gchar *namespace, Xml *file) { const gchar *name; - glong value; + gint64 value; + gchar *value_str; gboolean deprecated; name = g_base_info_get_name ((GIBaseInfo *)info); @@ -712,7 +713,9 @@ write_value_info (const gchar *namespace, deprecated = g_base_info_is_deprecated ((GIBaseInfo *)info); xml_start_element (file, "member"); - xml_printf (file, " name=\"%s\" value=\"%ld\"", name, value); + value_str = g_strdup_printf ("%" G_GINT64_FORMAT, value); + xml_printf (file, " name=\"%s\" value=\"%s\"", name, value_str); + g_free (value_str); if (deprecated) xml_printf (file, " deprecated=\"1\""); |