diff --git a/drivers/char/socket.c b/drivers/char/socket.c index 10a745d5..60554822 100755 --- a/drivers/char/socket.c +++ b/drivers/char/socket.c @@ -58,7 +58,20 @@ static ssize_t socket_write(fildes_t* file, uint8_t* buffer, size_t size) { int ret = 0; #if defined(CONFIG_LWIP) && LWIP_SOCKET + if (BUILTIN_EXPECT(!size, 0)) + return 0; + +#if LWIP_TCPIP_CORE_LOCKING ret = lwip_write(file->offset, buffer, size); +#else + // create a copy and forward this copy to the TCP/IP stack + uint8_t* tmp = kmalloc(size); + if (BUILTIN_EXPECT(!tmp, 0)) + return -ENOMEM; + memcpy(tmp, buffer, size); + ret = lwip_write(file->offset, tmp, size); + kfree(tmp, size); +#endif if (ret < 0) ret = -errno; #endif