diff options
author | Mitch Bradley <wmb@firmworks.com> | 2016-10-13 08:41:58 -1000 |
---|---|---|
committer | Mitch Bradley <wmb@firmworks.com> | 2016-10-13 08:41:58 -1000 |
commit | c7e19f85e02974fe3bf000d380f887f64538dc9f (patch) | |
tree | 6fb5809962e9be2317df6b8e04dca0c1b10f74f7 | |
parent | 5972a99e740e3a40cdd3f903bd27302d08f0b876 (diff) | |
download | cforth-c7e19f85e02974fe3bf000d380f887f64538dc9f.tar.gz |
esp8266 - Fixed ugly bug in create/open-file
The symptom was that "rf foo" would sometimes make
a file named "X" which was not deleteable because
the real name contained a non-printing character.
Also added "rm*" and "rm *" to clear out the file system.
-rw-r--r-- | src/app/esp8266/fileio.c | 4 | ||||
-rw-r--r-- | src/app/esp8266/files.fth | 14 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/app/esp8266/fileio.c b/src/app/esp8266/fileio.c index 9b96c01..a4b40c5 100644 --- a/src/app/esp8266/fileio.c +++ b/src/app/esp8266/fileio.c @@ -39,7 +39,7 @@ static spiffs_flags open_modes[] = { SPIFFS_RDONLY, SPIFFS_WRONLY, SPIFFS_RDWR } cell pfopen(char *name, int len, int mode, cell *up) { char cstrbuf[MAXNAMELEN]; char *s = altocstr(name, len, cstrbuf, MAXNAMELEN); - cell ret = SPIFFS_open(&fs, cstrbuf, (spiffs_flags)open_modes[mode], 0); + cell ret = SPIFFS_open(&fs, s, (spiffs_flags)open_modes[mode], 0); // spiffs returns negative number on error, like Unix open(), // but pfopen() is supposed to return NULL like fopen() return ret<0 ? 0 : ret ; @@ -50,7 +50,7 @@ static spiffs_flags create_modes[] = { SPIFFS_CREAT|SPIFFS_APPEND|SPIFFS_RDWR, S cell pfcreate(char *name, int len, int mode, cell *up) { char cstrbuf[MAXNAMELEN]; char *s = altocstr(name, len, cstrbuf, MAXNAMELEN); - cell ret = SPIFFS_open(&fs, cstrbuf, (spiffs_flags)create_modes[mode], 0); + cell ret = SPIFFS_open(&fs, s, (spiffs_flags)create_modes[mode], 0); // spiffs returns negative number on error, like Unix open(), // but pfopen() is supposed to return NULL like fopen() return ret<0 ? 0 : ret ; diff --git a/src/app/esp8266/files.fth b/src/app/esp8266/files.fth index b5dfefb..8a1feae 100644 --- a/src/app/esp8266/files.fth +++ b/src/app/esp8266/files.fth @@ -37,4 +37,16 @@ alias rf xmodem-to-file: ; : cat ( "filename" -- ) safe-parse-word $print-file ; -: rm ( "filename" -- ) safe-parse-word delete-file ; +: rm* ( -- ) + first-file ( dirent ) + begin ?dup while ( dirent ) + file-name cscount delete-file ( dirent ) + next-file ( dirent ) + repeat +; +\needs $= : $= ( $1 $2 -- same? ) compare 0= ; +: rm ( "filename" -- ) + safe-parse-word ( name$ ) + 2dup " *" $= if 2drop rm* else delete-file then +; + |