aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Bradley <wmb@firmworks.com>2016-10-13 08:41:58 -1000
committerMitch Bradley <wmb@firmworks.com>2016-10-13 08:41:58 -1000
commitc7e19f85e02974fe3bf000d380f887f64538dc9f (patch)
tree6fb5809962e9be2317df6b8e04dca0c1b10f74f7
parent5972a99e740e3a40cdd3f903bd27302d08f0b876 (diff)
downloadcforth-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.c4
-rw-r--r--src/app/esp8266/files.fth14
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
+;
+