فهرست منبع

fix: fatfs,vfs,fopen映射到f_open的flag定义修改,调整打开的行为

Wendal Chen 4 ماه پیش
والد
کامیت
0ade1319cd
1فایلهای تغییر یافته به همراه21 افزوده شده و 21 حذف شده
  1. 21 21
      luat/vfs/luat_fs_fatfs.c

+ 21 - 21
luat/vfs/luat_fs_fatfs.c

@@ -16,27 +16,27 @@ FILE* luat_vfs_fatfs_fopen(void* userdata, const char *filename, const char *mod
     //FATFS *fs = (FATFS*)userdata;
     FIL* fp = luat_heap_malloc(sizeof(FIL));
     int flag = 0;
-    for (size_t i = 0; i < strlen(mode); i++)
-    {
-        char m = *(mode + i);
-        switch (m)
-        {
-        case 'r':
-            flag |= FA_READ;
-            break;
-        case 'w':
-            flag |= FA_WRITE | FA_CREATE_ALWAYS;
-            break;
-        case 'a':
-            flag |= FA_OPEN_APPEND | FA_WRITE;
-            break;
-        case '+':
-            flag |= FA_OPEN_APPEND;
-            break;
-        
-        default:
-            break;
-        }
+    if (!strcmp("r+", mode) || !strcmp("r+b", mode) || !strcmp("rb+", mode)) {
+        flag = FA_READ | FA_WRITE | FA_OPEN_ALWAYS;
+    }
+    else if(!strcmp("w+", mode) || !strcmp("w+b", mode) || !strcmp("wb+", mode)) {
+        flag = FA_READ | FA_WRITE | FA_CREATE_ALWAYS;
+    }
+    else if(!strcmp("a+", mode) || !strcmp("a+b", mode) || !strcmp("ab+", mode)) {
+        flag = FA_READ | FA_WRITE | FA_OPEN_APPEND;
+    }
+    else if(!strcmp("w", mode) || !strcmp("wb", mode)) {
+        flag = FA_WRITE | FA_READ;
+    }
+    else if(!strcmp("r", mode) || !strcmp("rb", mode)) {
+        flag = FA_READ;
+    }
+    else if(!strcmp("a", mode) || !strcmp("ab", mode)) {
+        flag = FA_WRITE | FA_OPEN_APPEND;
+    }
+    else {
+        LLOGW("bad file open mode %s, fallback to 'r'", mode);
+        flag = FA_READ;
     }
     FRESULT ret = f_open(fp, filename, flag);
     if (ret != FR_OK) {