diff --git a/wled00/cfg.cpp b/wled00/cfg.cpp index 653da685c9..e8e75ca91d 100644 --- a/wled00/cfg.cpp +++ b/wled00/cfg.cpp @@ -659,7 +659,7 @@ void deserializeConfigFromFS() { DEBUG_PRINTLN(F("Reading settings from /cfg.json...")); success = readObjectFromFile("/cfg.json", nullptr, &doc); - if (!success) { // if file does not exist, optionally try reading from EEPROM and then save defaults to FS + if (!success || doc.size() == 0) { // if file does not exist or contains only empty JSON (e.g. "{}"), try reading from EEPROM (if supported) and then save defaults to FS releaseJSONBufferLock(); #ifdef WLED_ADD_EEPROM_SUPPORT deEEPSettings(); @@ -1122,7 +1122,7 @@ bool deserializeConfigSec() { if (!requestJSONBufferLock(3)) return false; bool success = readObjectFromFile("/wsec.json", nullptr, &doc); - if (!success) { + if (!success || doc.size() == 0) { // treat empty JSON (e.g. "{}") the same as a missing file releaseJSONBufferLock(); return false; } diff --git a/wled00/file.cpp b/wled00/file.cpp index 56af35cc75..2480f110b4 100644 --- a/wled00/file.cpp +++ b/wled00/file.cpp @@ -223,7 +223,7 @@ bool appendObjectToFile(const char* key, JsonDocument* content, uint32_t s, uint uint32_t pos = 0; if (!f) return false; - if (f.size() < 3) { + if (f.size() < 4) { // file uninitialized -> write minimal skeleton char init[12]; strcpy_P(init, PSTR("{\"0\":{}}")); f.print(init); diff --git a/wled00/presets.cpp b/wled00/presets.cpp index 4d118f196b..35436018d9 100644 --- a/wled00/presets.cpp +++ b/wled00/presets.cpp @@ -123,7 +123,15 @@ bool getPresetName(byte index, String& name) void initPresetsFile() { - if (WLED_FS.exists(getFileName())) return; + if (WLED_FS.exists(getFileName())) { + // treat an empty JSON file (e.g. "{}", "{ }") the same as a missing file: + // f.size() < 4 is the same threshold used in appendObjectToFile() to detect an uninitialized file + File f = WLED_FS.open(getFileName(), "r"); + bool empty = f && f.size() < 4; // file does exist due to previous "if" + if (f) f.close(); + if (empty) WLED_FS.remove(getFileName()); // remove the empty file so it can be recreated below + else return; // file not empty -> keep (nothing to init) + } StaticJsonDocument<64> doc; JsonObject sObj = doc.to();