diff --git a/core/net/uip6.c b/core/net/uip6.c index 7f51ce4e9..f0d93688c 100644 --- a/core/net/uip6.c +++ b/core/net/uip6.c @@ -2320,12 +2320,23 @@ uip_send(const void *data, int len) { int copylen; #define MIN(a,b) ((a) < (b)? (a): (b)) - copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN - - (int)((char *)uip_sappdata - (char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN])); + + if(uip_sappdata != NULL) { + copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN - + (int)((char *)uip_sappdata - + (char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN])); + } else { + copylen = MIN(len, UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN); + } if(copylen > 0) { uip_slen = copylen; if(data != uip_sappdata) { - memcpy(uip_sappdata, (data), uip_slen); + if(uip_sappdata == NULL) { + memcpy((char *)&uip_buf[UIP_LLH_LEN + UIP_TCPIP_HLEN], + (data), uip_slen); + } else { + memcpy(uip_sappdata, (data), uip_slen); + } } } }