]> granicus.if.org Git - esp-idf/commitdiff
lwip: Make LWIP_SOCKET_OFFSET signed, remove need for underflow check
authorAngus Gratton <angus@espressif.com>
Fri, 20 Oct 2017 10:00:36 +0000 (18:00 +0800)
committerAngus Gratton <gus@projectgus.com>
Fri, 20 Oct 2017 10:04:28 +0000 (18:04 +0800)
This reverts commit 541493d87769e0fa7fa128f7bdd0c2b5bcaa25d0.

components/lwip/include/lwip/lwip/sockets.h
components/lwip/include/lwip/port/arch/vfs_lwip.h
components/lwip/port/vfs_lwip.c
components/vfs/include/esp_vfs.h
components/vfs/vfs.c

index 10e8ace0384468c5f78dc4464aba72ca423631ef..cb458988a6e21f8ce3153206b65a8ee95fb6e774 100755 (executable)
@@ -431,9 +431,9 @@ typedef struct ip_mreq {
 /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */
 #define FD_SETSIZE    MEMP_NUM_NETCONN
 #define FDSETSAFESET(n, code) do { \
-  if (n >= LWIP_SOCKET_OFFSET && ((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0)) { \
+  if (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0)) { \
   code; }} while(0)
-#define FDSETSAFEGET(n, code) (n >= LWIP_SOCKET_OFFSET && ((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0) ?\
+#define FDSETSAFEGET(n, code) (((n) - LWIP_SOCKET_OFFSET < MEMP_NUM_NETCONN) && (((int)(n) - LWIP_SOCKET_OFFSET) >= 0) ?\
   (code) : 0)
 #define FD_SET(n, p)  FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] |=  (1 << (((n)-LWIP_SOCKET_OFFSET) & 7)))
 #define FD_CLR(n, p)  FDSETSAFESET(n, (p)->fd_bits[((n)-LWIP_SOCKET_OFFSET)/8] &= ~(1 << (((n)-LWIP_SOCKET_OFFSET) & 7)))
index 59ed087c51fbcc62e05273be1cd06f87d696d5e2..88714b03b9f32deedfbfd4dee1c51da346e216b5 100644 (file)
@@ -19,7 +19,7 @@ extern "C" {
 /* Internal declarations used to ingreate LWIP port layer
    to ESP-IDF VFS for POSIX I/O.
 */
-extern unsigned lwip_socket_offset;
+extern int lwip_socket_offset;
 
 void esp_vfs_lwip_sockets_register();
 
index b3c6261924d57c325be28e4fff9f226fa7adedd0..aa623f01037637044376a461ece3aa6608f7ead8 100644 (file)
@@ -37,7 +37,7 @@
    FDs that the user sees are the same FDs.
 */
 
-unsigned lwip_socket_offset;
+int lwip_socket_offset;
 
 static int lwip_fcntl_r_wrapper(int fd, int cmd, va_list args);
 static int lwip_ioctl_r_wrapper(int fd, int cmd, va_list args);
@@ -54,14 +54,14 @@ void esp_vfs_lwip_sockets_register()
         .fcntl = &lwip_fcntl_r_wrapper,
         .ioctl = &lwip_ioctl_r_wrapper,
     };
-    unsigned max_fd;
+    int max_fd;
 
     ESP_ERROR_CHECK(esp_vfs_register_socket_space(&vfs, NULL, &lwip_socket_offset, &max_fd));
 
     /* LWIP can't be allowed to create more sockets than fit in the per-VFS fd space. Currently this isn't configurable
      * but it's set much larger than CONFIG_LWIP_MAX_SOCKETS should ever be (max 2^12 FDs).
      */
-    assert(CONFIG_LWIP_MAX_SOCKETS <= max_fd - lwip_socket_offset);
+    assert(max_fd >= lwip_socket_offset && CONFIG_LWIP_MAX_SOCKETS <= max_fd - lwip_socket_offset);
 }
 
 static int lwip_fcntl_r_wrapper(int fd, int cmd, va_list args)
index 9cd8e5e5691aa1db3fecc9291fd4cf415a3a8ec3..ab645fccf682543ad109f1cae0f4363be1783fa1 100644 (file)
@@ -205,7 +205,7 @@ esp_err_t esp_vfs_register(const char* base_path, const esp_vfs_t* vfs, void* ct
  * @return  ESP_OK if successful, ESP_ERR_NO_MEM if too many VFSes are
  *          registered.
  */
-esp_err_t esp_vfs_register_socket_space(const esp_vfs_t *vfs, void *ctx, unsigned *p_min_fd, unsigned *p_max_fd);
+esp_err_t esp_vfs_register_socket_space(const esp_vfs_t *vfs, void *ctx, int *p_min_fd, int *p_max_fd);
 
 /**
  * Unregister a virtual filesystem for given path prefix
index 92f60b6029369b271ca5f9220d7779a07aef70f1..2a69df78ae5fd23141e14e786d3b5af0ae41296b 100644 (file)
@@ -54,7 +54,7 @@ typedef struct vfs_entry_ {
 static vfs_entry_t* s_vfs[VFS_MAX_COUNT] = { 0 };
 static size_t s_vfs_count = 0;
 
-static esp_err_t esp_vfs_register_common(const char* base_path, size_t len, const esp_vfs_t* vfs, void* ctx, unsigned *p_minimum_fd, unsigned *p_maximum_fd)
+static esp_err_t esp_vfs_register_common(const char* base_path, size_t len, const esp_vfs_t* vfs, void* ctx, int *p_minimum_fd, int *p_maximum_fd)
 {
     if (len != LEN_PATH_PREFIX_IGNORED) {
         if ((len != 0 && len < 2) || (len > ESP_VFS_PATH_MAX)) {
@@ -107,7 +107,7 @@ esp_err_t esp_vfs_register(const char* base_path, const esp_vfs_t* vfs, void* ct
     return esp_vfs_register_common(base_path, strlen(base_path), vfs, ctx, NULL, NULL);
 }
 
-esp_err_t esp_vfs_register_socket_space(const esp_vfs_t *vfs, void *ctx, unsigned *p_min_fd, unsigned *p_max_fd)
+esp_err_t esp_vfs_register_socket_space(const esp_vfs_t *vfs, void *ctx, int *p_min_fd, int *p_max_fd)
 {
     return esp_vfs_register_common("", LEN_PATH_PREFIX_IGNORED, vfs, ctx, p_min_fd, p_max_fd);
 }