Refactor code to make use of new atoi_byte()

This commit is contained in:
René van Dorst
2026-08-25 07:54:15 +02:00
parent 80f97a50e0
commit 57061161b6
+58 -31
View File
@@ -235,22 +235,32 @@ uint8_t atoi_short(uint8_t idx)
} }
uint8_t parse_ip(uint8_t idx) int8_t parse_ip(uint8_t idx)
{ {
__xdata uint8_t b; uint8_t b = 0;
uint8_t ret;
for (b = 0; b < 4; b++) { while(1) {
ip[b] = 0; ret = atoi_byte(idx);
while (isnumber(cmd_buffer[idx])) { if (ret == 0) {
ip[b] = (ip[b] * 10) + cmd_buffer[idx] - '0'; goto err;
idx++;
} }
if (b < 3 && cmd_buffer[idx++] != '.') { idx += ret;
print_string("Error in IP format, expecting '.'\n"); ip[b++] = atoi_results_u8;
return -1;
if (b == 4) {
break;
}
if (cmd_buffer[idx++] != '.') {
goto err;
} }
} }
return 0; return 0;
err:
print_string("Error in IP format\n");
return -1;
} }
@@ -258,6 +268,7 @@ void parse_lag(void)
{ {
__xdata uint8_t group; __xdata uint8_t group;
__xdata uint16_t members = 0; __xdata uint16_t members = 0;
uint8_t ret;
if (cmd_compare(1, "show")) { if (cmd_compare(1, "show")) {
print_string("LAG status:\n"); print_string("LAG status:\n");
@@ -284,30 +295,35 @@ void parse_lag(void)
return; return;
} }
if (cmd_words_len < 2 || !isnumber(cmd_buffer[cmd_words_b[1]])) if (cmd_words_len < 2)
goto err; goto err;
group = cmd_buffer[cmd_words_b[1]] - '1';
// Parse group, expect only one number 0-9.
ret = atoi_byte(cmd_words_b[1]);
if (ret != 1) {
goto err;
}
group = atoi_results_u8 - 1;
if (group > 3) /* '0' wraps well past three, so one test does both ends */ if (group > 3) /* '0' wraps well past three, so one test does both ends */
goto err; goto err;
uint8_t w = 2; uint8_t w = 2;
while (w < cmd_words_len) { while (w < cmd_words_len) {
// write_char('|'); print_byte(w); write_char(':'); write_char(cmd_buffer[cmd_words_b[w]]); write_char('-'); // write_char('|'); print_byte(w); write_char(':'); write_char(cmd_buffer[cmd_words_b[w]]); write_char('-');
uint8_t port;
if (isnumber(cmd_buffer[cmd_words_b[w]])) { // Parse port.
port = cmd_buffer[cmd_words_b[w]] - '1'; ret = atoi_byte(cmd_words_b[w++]);
if (isnumber(cmd_buffer[cmd_words_b[w] + 1])) if (ret != 1)
port = (port + 1) * 10 + cmd_buffer[cmd_words_b[w] + 1] - '1';
if (port > 8) /* phys_to_log_port holds nine entries */
goto err;
port = machine.phys_to_log_port[port];
} else {
goto err; goto err;
}
uint8_t port = atoi_results_u8;
port = machine.phys_to_log_port[port];
if (port > machine.max_port) if (port > machine.max_port)
goto err; goto err;
members |= ((uint16_t)1) << port; members |= ((uint16_t)1) << port;
w++;
} }
port_lag_members_set(group, members); port_lag_members_set(group, members);
return; return;
@@ -828,11 +844,14 @@ void parse_sfp(void)
} }
return; return;
} }
if (cmd_buffer[cmd_words_b[1]] < '1' || cmd_buffer[cmd_words_b[1]] > '2' || cmd_buffer[cmd_words_b[1] + 1] != ' ' ) { uint8_t idx = cmd_words_b[1];
uint8_t ret = atoi_byte(idx);
idx += ret;
slot = atoi_results_u8 - 1;
if (ret == 0 || cmd_buffer[idx] != ' ' || slot > 1) {
print_string("Illegal SFP slot number\n"); print_string("Illegal SFP slot number\n");
return; return;
} }
slot = cmd_buffer[cmd_words_b[1]] - '1';
if (slot >= machine.n_sfp) { if (slot >= machine.n_sfp) {
print_string("SFP slot not present\n"); print_string("SFP slot not present\n");
return; return;
@@ -955,9 +974,10 @@ void parse_sdsget(void)
goto err; goto err;
} }
if (atoi_byte(&sds_id, cmd_words_b[1])) { if (!atoi_byte(cmd_words_b[1])) {
goto err; goto err;
} }
sds_id = atoi_results_u8;
hex_size = atoi_hex(cmd_words_b[2]); hex_size = atoi_hex(cmd_words_b[2]);
if (hex_size != 1) { if (hex_size != 1) {
@@ -999,9 +1019,10 @@ void parse_sdsset(void)
goto err; goto err;
} }
if (atoi_byte(&sds_id, cmd_words_b[1])) { if (!atoi_byte(cmd_words_b[1])) {
goto err; goto err;
} }
sds_id = atoi_results_u8;
hex_size = atoi_hex(cmd_words_b[2]); hex_size = atoi_hex(cmd_words_b[2]);
if (hex_size != 1) { if (hex_size != 1) {
@@ -1054,13 +1075,16 @@ void parse_phyget(void)
goto err; goto err;
} }
if (atoi_byte(&phy_id, cmd_words_b[1])) { if (!atoi_byte(cmd_words_b[1])) {
goto err; goto err;
} }
phy_id = atoi_results_u8;
if (atoi_byte(&dev_id, cmd_words_b[2])) {
if (!atoi_byte(cmd_words_b[2])) {
goto err; goto err;
} }
dev_id = atoi_results_u8;
hex_size = atoi_hex(cmd_words_b[3]); hex_size = atoi_hex(cmd_words_b[3]);
if (hex_size == 0 || hex_size > 2) { if (hex_size == 0 || hex_size > 2) {
@@ -1100,13 +1124,16 @@ void parse_physet(void)
goto err; goto err;
} }
if (atoi_byte(&phy_id, cmd_words_b[1])) { if (!atoi_byte(cmd_words_b[1])) {
goto err; goto err;
} }
phy_id = atoi_results_u8;
if (atoi_byte(&dev_id, cmd_words_b[2])) {
if (!atoi_byte(cmd_words_b[2])) {
goto err; goto err;
} }
dev_id = atoi_results_u8;
hex_size = atoi_hex(cmd_words_b[3]); hex_size = atoi_hex(cmd_words_b[3]);
if (hex_size == 0 || hex_size > 2) { if (hex_size == 0 || hex_size > 2) {