From 2feb5ac8941587d28790350bf3fde13ad9c8f403 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Tue, 27 Oct 2015 23:59:05 +0100 Subject: [PATCH] Fixes #3001: Lua io.open() could not create new files --- radio/src/thirdparty/Lua/src/liolib.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/radio/src/thirdparty/Lua/src/liolib.c b/radio/src/thirdparty/Lua/src/liolib.c index 3946e7e6d..16e2fb9d3 100644 --- a/radio/src/thirdparty/Lua/src/liolib.c +++ b/radio/src/thirdparty/Lua/src/liolib.c @@ -249,14 +249,14 @@ static int io_open (lua_State *L) { const char *md = luaL_optstring(L, 2, "r"); LStream *p = newfile(L); #if defined(USE_FATFS) - BYTE mode; - if (strchr(md, 'w') || strchr(md, 'a')) - mode = FA_WRITE; - else - mode = FA_READ; + BYTE mode = FA_READ; + if (*md == 'w') + mode = FA_WRITE | FA_CREATE_ALWAYS; // always create file and truncate it + else if (*md == 'a') + mode = FA_WRITE | FA_OPEN_ALWAYS; // always open file (create it if necessary) FRESULT result = f_open(&p->f, filename, mode); - if (result == FR_OK && strchr(md, 'a')) - result = f_lseek(&p->f, f_size(&p->f)); + if (result == FR_OK && *md == 'a') + result = f_lseek(&p->f, f_size(&p->f)); // seek to the end of the file return result == FR_OK ? 1 : 0; #else const char *mode = md; /* to traverse/check mode */