From cb6fcbbcfa71cce39f005fe79538b94f30d2470e Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Fri, 1 Jan 2010 19:29:12 +0000 Subject: [PATCH] Allocate inline_config separately to avoid alignment issues. --- src/emu/devintrf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/emu/devintrf.c b/src/emu/devintrf.c index 916a0a00371..922a24a2cb5 100644 --- a/src/emu/devintrf.c +++ b/src/emu/devintrf.c @@ -147,7 +147,7 @@ device_config *device_list_add(device_list *devlist, const device_config *owner, configlen = (UINT32)devtype_get_info_int(type, DEVINFO_INT_INLINE_CONFIG_BYTES); /* allocate a new device */ - device = (device_config *)alloc_array_or_die(UINT8, sizeof(*device) + strlen(tag) + configlen); + device = (device_config *)alloc_array_or_die(UINT8, sizeof(*device) + strlen(tag)); /* add to the map */ tmerr = tagmap_add_unique_hash(devlist->map, tag, device, FALSE); @@ -180,7 +180,7 @@ device_config *device_list_add(device_list *devlist, const device_config *owner, device->clock = device->owner->clock * ((device->clock >> 12) & 0xfff) / ((device->clock >> 0) & 0xfff); } device->static_config = NULL; - device->inline_config = (configlen == 0) ? NULL : (device->tag + strlen(tag) + 1); + device->inline_config = (configlen == 0) ? NULL : alloc_array_or_die(UINT8, configlen); /* ensure live fields are all cleared */ device->machine = NULL; @@ -258,6 +258,8 @@ void device_list_remove(device_list *devlist, const char *tag) tagmap_remove(devlist->map, device->tag); /* free the device object */ + if (device->inline_config != NULL) + free(device->inline_config); free(device); }