fix when length is not even dividable with four.

This commit is contained in:
iceman1001 2024-04-24 21:33:56 +02:00
commit d635f39048

View file

@ -23,6 +23,7 @@
#include "util.h" // param_get32ex
#include "lfdemod.h"
#include "cmddata.h" // for g_debugmode
#include "commonutil.h" // Uint4bytetomemle
int32_t g_GraphBuffer[MAX_GRAPH_TRACE_LEN];
@ -502,14 +503,17 @@ buffer_savestate_t save_buffer8(uint8_t *src, size_t length) {
// 1/4 of the size needed
size_t buffSize = (length / 4);
if (length % 4) {
buffSize++;
}
// calloc the memory needed
uint32_t* savedBuffer = (uint32_t*)calloc(buffSize, sizeof(uint32_t));
size_t index = 0;
// Pack the source array into the backing array
for(size_t i = 0; i < length; i += 4) {
savedBuffer[index] = (uint32_t)src[i] | ((uint32_t)src[i+1] << 8) |
((uint32_t)src[i+2] << 16) | ((uint32_t)src[i+3] << 24);
savedBuffer[index] = MemLeToUint4byte(src + i);
index++;
}
@ -557,10 +561,10 @@ size_t restore_buffer8(buffer_savestate_t saveState, uint8_t *dest) {
// Unpack the array
for(size_t i = 0; i < saveState.bufferSize; i++) {
dest[index++] = (uint8_t)(saveState.buffer[i] & 0xFF);
dest[index++] = (uint8_t)((saveState.buffer[i] >> 8) & 0xFF);
dest[index++] = (uint8_t)((saveState.buffer[i] >> 16) & 0xFF);
dest[index++] = (uint8_t)((saveState.buffer[i] >> 24) & 0xFF);
dest[index++] = saveState.buffer[i];
dest[index++] = (saveState.buffer[i] >> 8) & 0xFF;
dest[index++] = (saveState.buffer[i] >> 16) & 0xFF;
dest[index++] = (saveState.buffer[i] >> 24) & 0xFF;
}
return index;