X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=utcp.c;h=1627be77cbce59467e7aae4936cd4a730ff73ce7;hb=de4f8ad9205a0fcf3198d75ad0747fac9faa9787;hp=607af2d149ee9242646d3f1a97638ecb64e01078;hpb=027abc36cfb0a8247625f5f6af65b7ce63065a33;p=utcp diff --git a/utcp.c b/utcp.c index 607af2d..1627be7 100644 --- a/utcp.c +++ b/utcp.c @@ -53,9 +53,9 @@ } while (0) #endif -#ifndef max -#define max(a, b) ((a) > (b) ? (a) : (b)) -#endif +static inline size_t max(size_t a, size_t b) { + return a > b ? a : b; +} #ifdef UTCP_DEBUG #include @@ -88,6 +88,10 @@ static void print_packet(struct utcp *utcp, const char *dir, const void *pkt, si if(len > sizeof hdr) { uint32_t datalen = len - sizeof hdr; uint8_t *str = malloc((datalen << 1) + 7); + if(!str) { + debug("out of memory"); + return; + } memcpy(str, " data=", 6); uint8_t *strptr = str + 6; const uint8_t *data = pkt; @@ -646,7 +650,7 @@ cleanup: * that are shifted to before the start of the receive buffer. * * There are three cases: - * - the SACK entry is ahead of ^, in that case just change the offset. + * - the SACK entry is after ^, in that case just change the offset. * - the SACK entry starts before and ends after ^, so we have to * change both its offset and size. * - the SACK entry is completely before ^, in that case delete it. @@ -702,6 +706,8 @@ static void handle_out_of_order(struct utcp_connection *c, uint32_t offset, cons memmove(&c->sacks[i + 1], &c->sacks[i], (NSACKS - i - 1) * sizeof c->sacks[i]); c->sacks[i].offset = offset; c->sacks[i].len = rxd; + } else { + debug("SACK entries full, dropping packet\n"); } break; } else { // merge