diff --git a/src/aprs_is.c b/src/aprs_is.c index 09a31ed..36a402a 100644 --- a/src/aprs_is.c +++ b/src/aprs_is.c @@ -196,9 +196,7 @@ ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *aprs, } else if (c == ',' || c == ':') { if (aprs->frame.dest.callsign[0]) { if (aprs->frame.hops == PATTY_AX25_MAX_HOPS) { - errno = EOVERFLOW; - - goto error; + goto drop; } addr = &aprs->frame.repeaters[aprs->frame.hops++]; @@ -211,25 +209,19 @@ ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *aprs, } } else if (PATTY_AX25_ADDR_CHAR_VALID(c)) { if (aprs->offset_call == PATTY_AX25_ADDRSTRLEN) { - errno = EOVERFLOW; - - goto error; + goto drop; } aprs->call[aprs->offset_call++] = c; } else { - errno = EINVAL; - - goto error; + goto drop; } if (addr) { aprs->call[aprs->offset_call] = '\0'; if (patty_ax25_pton(aprs->call, addr) < 0) { - (void)patty_ax25_aprs_is_flush(aprs); - - goto done; + goto drop; } aprs->offset_call = 0; @@ -270,9 +262,7 @@ ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *aprs, goto done; } else { if (aprs->offset_info == aprs->infosz) { - errno = EOVERFLOW; - - goto error; + goto drop; } aprs->info[aprs->offset_info++] = c; @@ -288,6 +278,11 @@ ssize_t patty_ax25_aprs_is_drain(patty_ax25_aprs_is *aprs, done: return aprs->offset_i - offset_start; +drop: + (void)patty_ax25_aprs_is_flush(aprs); + + return aprs->offset_i - offset_start; + error: return -1; }