Эх сурвалжийг харах

vfs: Add ioctl() to filesystem set

Angus Gratton 8 жил өмнө
parent
commit
a320fed3b5

+ 4 - 0
components/vfs/include/esp_vfs.h

@@ -145,6 +145,10 @@ typedef struct
         int (*fcntl_p)(void* ctx, int fd, int cmd, va_list args);
         int (*fcntl)(int fd, int cmd, va_list args);
     };
+    union {
+        int (*ioctl_p)(void* ctx, int fd, int cmd, va_list args);
+        int (*ioctl)(int fd, int cmd, va_list args);
+    };
 } esp_vfs_t;
 
 

+ 17 - 0
components/vfs/vfs.c

@@ -489,3 +489,20 @@ int fcntl(int fd, int cmd, ...)
     va_end(args);
     return ret;
 }
+
+int ioctl(int fd, int cmd, ...)
+{
+    const vfs_entry_t* vfs = get_vfs_for_fd(fd);
+    struct _reent* r = __getreent();
+    if (vfs == NULL) {
+        __errno_r(r) = EBADF;
+        return -1;
+    }
+    int local_fd = translate_fd(vfs, fd);
+    int ret;
+    va_list args;
+    va_start(args, cmd);
+    CHECK_AND_CALL(ret, r, vfs, ioctl, local_fd, cmd, args);
+    va_end(args);
+    return ret;
+}