From 0096de34c5e00fee2fbdd45330c8210e92d3d88e Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Mon, 17 Mar 2025 21:07:21 +0100 Subject: [PATCH] fix mod 2 --- src/rds.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/rds.c b/src/rds.c index db97aab..21971c2 100644 --- a/src/rds.c +++ b/src/rds.c @@ -276,15 +276,17 @@ static void get_rds_ps_group(RDSEncoder* enc, uint16_t *blocks) { break; case 2: memcpy(enc->state[enc->program].ps_text, &(enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position]), PS_LENGTH); - uint8_t next_position = enc->state[enc->program].dynamic_ps_position; - for(int i = 1; i < enc->data[enc->program].dps1_len - enc->state[enc->program].dynamic_ps_position; i++) { - if(enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position + i] == ' ') { - next_position = enc->state[enc->program].dynamic_ps_position + i + 1; // Position after the space - break; + uint8_t next_position = 0; + if (enc->state[enc->program].dynamic_ps_position + PS_LENGTH < enc->data[enc->program].dps1_len) { + next_position = enc->state[enc->program].dynamic_ps_position + PS_LENGTH; + for (int i = 0; i < PS_LENGTH; i++) { + if (enc->state[enc->program].dynamic_ps_position + i < enc->data[enc->program].dps1_len && + enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position + i] == ' ') { + next_position = enc->state[enc->program].dynamic_ps_position + i + 1; + break; + } } - } - if(next_position == enc->state[enc->program].dynamic_ps_position || - next_position >= enc->data[enc->program].dps1_len) { + } else { next_position = 0; } enc->state[enc->program].dynamic_ps_position = next_position; @@ -333,16 +335,18 @@ static void get_rds_ps_group(RDSEncoder* enc, uint16_t *blocks) { enc->state[enc->program].dynamic_ps_position++; break; case 2: - memcpy(enc->state[enc->program].ps_text, &(enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position]), PS_LENGTH); - uint8_t next_position = enc->state[enc->program].dynamic_ps_position; - for(int i = 1; i < enc->data[enc->program].dps1_len - enc->state[enc->program].dynamic_ps_position; i++) { - if(enc->state[enc->program].dps1_text[enc->state[enc->program].dynamic_ps_position + i] == ' ') { - next_position = enc->state[enc->program].dynamic_ps_position + i + 1; // Position after the space - break; + memcpy(enc->state[enc->program].ps_text, &(enc->state[enc->program].dps1_nexttext[enc->state[enc->program].dynamic_ps_position]), PS_LENGTH); + uint8_t next_position = 0; + if (enc->state[enc->program].dynamic_ps_position + PS_LENGTH < enc->data[enc->program].dps1_len) { + next_position = enc->state[enc->program].dynamic_ps_position + PS_LENGTH; + for (int i = 0; i < PS_LENGTH; i++) { + if (enc->state[enc->program].dynamic_ps_position + i < enc->data[enc->program].dps1_len && + enc->state[enc->program].dps1_nexttext[enc->state[enc->program].dynamic_ps_position + i] == ' ') { + next_position = enc->state[enc->program].dynamic_ps_position + i + 1; + break; + } } - } - if(next_position == enc->state[enc->program].dynamic_ps_position || - next_position >= enc->data[enc->program].dps1_len) { + } else { next_position = 0; } enc->state[enc->program].dynamic_ps_position = next_position;