diff --git a/src/modulator.c b/src/modulator.c index 2c2331e..336efad 100644 --- a/src/modulator.c +++ b/src/modulator.c @@ -18,7 +18,7 @@ void Modulator_saveToFile(RDSModulatorParameters *emp, const char *option) { memset(&tempFile, 0, sizeof(RDSModulatorParametersFile)); tempFile.check = 160; memcpy(&tempFile.params, emp, sizeof(RDSModulatorParameters)); - tempFile.crc = crc16_ccitt((char*)&tempFile, sizeof(RDSModulatorParametersFile) - sizeof(uint16_t)); + tempFile.crc = crc16_ccitt((char*)&tempFile, offsetof(RDSModulatorParametersFile, crc)); } memcpy(&tempMod, &tempFile.params, sizeof(RDSModulatorParameters)); diff --git a/src/rds.c b/src/rds.c index 9d8ad76..f530718 100644 --- a/src/rds.c +++ b/src/rds.c @@ -39,7 +39,7 @@ void saveToFile(RDSEncoder *emp, const char *option) { memcpy(&(rdsEncoderfile.rtpData[emp->program]), &(tempEncoder.rtpData[emp->program]), sizeof(RDSRTPlusData)*2); memcpy(&(rdsEncoderfile.encoder_data), &(tempEncoder.encoder_data), sizeof(RDSEncoderData)); rdsEncoderfile.program = tempEncoder.program; - rdsEncoderfile.crc = crc16_ccitt((char*)&rdsEncoderfile, sizeof(RDSEncoderFile) - sizeof(uint16_t)); + rdsEncoderfile.crc = crc16_ccitt((char*)&rdsEncoderfile, offsetof(RDSEncoderFile, crc)); file = fopen(encoderPath, "wb"); if (file == NULL) { @@ -68,7 +68,7 @@ void loadFromFile(RDSEncoder *enc) { return; } - uint16_t calculated_crc = crc16_ccitt((char*)&rdsEncoderfile, sizeof(RDSEncoderFile) - sizeof(uint16_t)); + uint16_t calculated_crc = crc16_ccitt((char*)&rdsEncoderfile, offsetof(RDSEncoderFile, crc)); if (calculated_crc != rdsEncoderfile.crc) { fprintf(stderr, "[RDSENCODER-FILE] CRC mismatch! Data may be corrupted\n"); return;