diff --git a/src/device.c b/src/device.c index 9693a6b..711d4e7 100644 --- a/src/device.c +++ b/src/device.c @@ -30,6 +30,7 @@ void freeDevMem(device_mem_t* devMem) free(devMem->memwriteCellSegments); free(devMem->memwriteValues[0]); free(devMem->memwriteValues); + free(devMem->memwriteWordLengths); free(devMem->cells); free(devMem->smartAddrReadHandlers); free(devMem->smartAddrWriteHandlers); @@ -207,6 +208,23 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf) memwriteValues[i] = &memwriteValuesContainers[i]; } + uint8_t* memwriteWordLengths = calloc(MEM_ACCESS_INTERCEPT_BUF_SIZE, sizeof(uint8_t)); + if(memwriteWordLengths == NULL) + { + sprintf(errbuf, "unable to allocate write interception addrs"); + free(devMem->memsegShifts); + free(devMem); + free(rawCells); + free(memreadCellAddrs); + free(cells); + free(cellNames); + free(memwriteCellAddrs); + free(memwriteCellSegments); + free(memwriteValues); + free(memwriteValuesContainers); + return NULL; + } + uint64_t smartAddrReadMask = 0; uint64_t smartAddrWriteMask = 0; mem_h_read_handler* smartAddrReadHandlers = calloc(memTotalSize, sizeof(mem_h_read_handler)); @@ -225,6 +243,7 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf) free(memwriteCellSegments); free(memwriteValues); free(memwriteValuesContainers); + free(memwriteWordLengths); return NULL; } @@ -245,6 +264,7 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf) free(memwriteCellSegments); free(memwriteValues); free(memwriteValuesContainers); + free(memwriteWordLengths); return NULL; } @@ -316,6 +336,7 @@ device_mem_t* genDevMem(device_specs_t* devSpec, char* errbuf) devMem->memreadCellAddrs = memreadCellAddrs; devMem->memwriteCellAddrs = memwriteCellAddrs; devMem->memwriteCellSegments = memwriteCellSegments; + devMem->memwriteWordLengths = memwriteWordLengths; devMem->memwriteValues = memwriteValues; devMem->memreadLen = 0; devMem->memwriteLen = 0;