diff options
author | Kedar Sovani <kedars@marvell.com> | 2009-10-21 13:28:12 +0200 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2010-02-11 17:31:01 -0500 |
commit | 0fb726196aeed6c4f29aa0dc4d2d6031fae3c985 (patch) | |
tree | 591c3f5c77ea8dca10d8e809b3b0d297eb92e3a7 /girepository/girnode.c | |
parent | a9e6ae83ffa54194adc01e84c85ac336c59fd520 (diff) | |
download | gobject-introspection-0fb726196aeed6c4f29aa0dc4d2d6031fae3c985.tar.gz |
Fix Alignment Errors.
Signed-off-by: Kedar Sovani <kedars@marvell.com>
https://bugzilla.gnome.org/show_bug.cgi?id=606139
Diffstat (limited to 'girepository/girnode.c')
-rw-r--r-- | girepository/girnode.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/girepository/girnode.c b/girepository/girnode.c index 2523ee1f..ede6d3b7 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -53,6 +53,13 @@ _g_irnode_dump_stats (void) g_message ("%lu types (%lu before sharing)", unique_types_count, types_count); } +#define DO_ALIGNED_COPY(dest_addr, value, type) \ +do { \ + type tmp_var; \ + tmp_var = value; \ + memcpy(dest_addr, &tmp_var, sizeof(type)); \ +} while(0) + #define ALIGN_VALUE(this, boundary) \ (( ((unsigned long)(this)) + (((unsigned long)(boundary)) -1)) & (~(((unsigned long)(boundary))-1))) @@ -2271,11 +2278,11 @@ g_ir_node_build_typelib (GIrNode *node, break; case GI_TYPE_TAG_INT64: blob->size = 8; - *(gint64*)&data[blob->offset] = (gint64) parse_int_value (constant->value); + DO_ALIGNED_COPY(&data[blob->offset], parse_int_value (constant->value), gint64); break; case GI_TYPE_TAG_UINT64: blob->size = 8; - *(guint64*)&data[blob->offset] = (guint64) parse_uint_value (constant->value); + DO_ALIGNED_COPY(&data[blob->offset], parse_uint_value (constant->value), guint64); break; case GI_TYPE_TAG_SHORT: blob->size = sizeof (gshort); @@ -2296,21 +2303,21 @@ g_ir_node_build_typelib (GIrNode *node, case GI_TYPE_TAG_SSIZE: /* FIXME */ case GI_TYPE_TAG_LONG: blob->size = sizeof (glong); - *(glong*)&data[blob->offset] = (glong) parse_int_value (constant->value); + DO_ALIGNED_COPY(&data[blob->offset], parse_int_value (constant->value), glong); break; case GI_TYPE_TAG_SIZE: /* FIXME */ case GI_TYPE_TAG_TIME_T: case GI_TYPE_TAG_ULONG: blob->size = sizeof (gulong); - *(gulong*)&data[blob->offset] = (gulong) parse_uint_value (constant->value); + DO_ALIGNED_COPY(&data[blob->offset], parse_uint_value (constant->value), gulong); break; case GI_TYPE_TAG_FLOAT: blob->size = sizeof (gfloat); - *(gfloat*)&data[blob->offset] = (gfloat) parse_float_value (constant->value); + DO_ALIGNED_COPY(&data[blob->offset], parse_float_value (constant->value), gfloat); break; case GI_TYPE_TAG_DOUBLE: blob->size = sizeof (gdouble); - *(gdouble*)&data[blob->offset] = (gdouble) parse_float_value (constant->value); + DO_ALIGNED_COPY(&data[blob->offset], parse_float_value (constant->value), gdouble); break; case GI_TYPE_TAG_UTF8: case GI_TYPE_TAG_FILENAME: |