static int process_ihex(uint8_t *data, ssize_t size)
 {
        struct ihex_binrec *record;
+       size_t record_size;
        uint32_t offset = 0;
        uint32_t data32;
        uint8_t type, crc = 0, crcbyte = 0;
                len <<= 8;
                len += hex(data + i, &crc); i += 2;
        }
-       record = malloc((sizeof (*record) + len + 3) & ~3);
+       record_size = ALIGN(sizeof(*record) + len, 4);
+       record = malloc(record_size);
        if (!record) {
                fprintf(stderr, "out of memory for records\n");
                return -ENOMEM;
        }
-       memset(record, 0, (sizeof(*record) + len + 3) & ~3);
+       memset(record, 0, record_size);
        record->len = len;
 
        /* now check if we have enough data to read everything */