Fix canal parsing: replace sscanf with strchr

This commit is contained in:
UA1ZBE
2026-07-22 10:12:24 +03:00
parent b7857a029b
commit 92427da26a

View File

@@ -212,18 +212,21 @@ public:
for (int j = 0; j < 20; j++) { sum += radio_driver.getCurrentRSSI(); delay(50); } for (int j = 0; j < 20; j++) { sum += radio_driver.getCurrentRSSI(); delay(50); }
char r[32]; snprintf(r, sizeof(r), "noise:%.0fdBm", sum / 20); defer_response(r); char r[32]; snprintf(r, sizeof(r), "noise:%.0fdBm", sum / 20); defer_response(r);
} else if (strncmp(cmd, "canal", 5) == 0) { } else if (strncmp(cmd, "canal", 5) == 0) {
const char* rest = cmd + 5; while (*rest == ' ') rest++; char buf[128]; strncpy(buf, cmd, sizeof(buf) - 1); buf[sizeof(buf) - 1] = 0;
char cname[32], cpass[32]; char* rest = buf + 5; while (*rest == ' ') rest++;
int n = sscanf(rest, "%31s %31s", cname, cpass); char* cname = rest;
if (n == 2) { char* space = strchr(cname, ' ');
if (!space) { defer_response("need name and password"); return; }
*space = 0;
char* cpass = space + 1;
if (*cpass == 0) { defer_response("need name and password"); return; }
strncpy(g_channel_name, cname, sizeof(g_channel_name) - 1); strncpy(g_channel_name, cname, sizeof(g_channel_name) - 1);
strncpy(g_channel_pass, cpass, sizeof(g_channel_pass) - 1); strncpy(g_channel_pass, cpass, sizeof(g_channel_pass) - 1);
saveChannelConfig(); saveChannelConfig();
char r[64]; snprintf(r, sizeof(r), "canal %s %s ok", cname, cpass); char r[64]; snprintf(r, sizeof(r), "canal %s %s ok", cname, cpass);
send_text(r); send_text(r);
delay(100); for (int i = 0; i < 5; i++) { digitalWrite(PIN_LED_STATUS, HIGH); delay(100); digitalWrite(PIN_LED_STATUS, LOW); delay(100); }
NVIC_SystemReset(); NVIC_SystemReset();
} else defer_response("canal name password");
} }
} }
}; };