diff --git a/src/ax25.c b/src/ax25.c index f5859a9..5eeaa93 100644 --- a/src/ax25.c +++ b/src/ax25.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -84,6 +83,21 @@ error_invalid_callsign: return -1; } +static inline int expt(int base, int e) { + int ret = base, + i; + + if (e == 0) { + return 1; + } + + for (i=1; icallsign[i] & 0xfe) >> 1; @@ -109,25 +123,32 @@ int patty_ax25_ntop(const patty_ax25_addr *addr, } if (ssid) { - int formatted; + int digits = ssid > 9? 2: 1, + d; - if ((formatted = snprintf(&dest[o], 1 + len - o, "-%d", ssid)) < 0) { - goto error_format_ssid; - } else { - o += formatted; + if (o + 1 + digits > len) { + goto error; + } + + dest[o++] = '-'; + + for (d=0; d len) { - goto error_overflow; + goto error; } dest[o] = '\0'; return 0; -error_format_ssid: -error_overflow: +error: errno = EOVERFLOW; return -1;