Skip to content

Commit 74c16ec

Browse files
committed
Fix short unaligned writes in SPIFFS HAL, 2nd attempt (#924)
1 parent 4a3d20c commit 74c16ec

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

hardware/esp8266com/esp8266/cores/esp8266/spiffs_hal.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,11 @@ int32_t spiffs_hal_write(uint32_t addr, uint32_t size, uint8_t *src) {
109109
}
110110

111111
if (addr < alignedBegin) {
112-
uint32_t nb = alignedBegin - addr;
113-
if (nb > size)
114-
nb = size;
115-
uint32_t tmp = 0xffffffff;
116-
memcpy(((uint8_t* )&tmp) + 4 - nb, src, nb);
117-
if (!ESP.flashWrite(alignedBegin - 4, &tmp, 4)) {
112+
uint32_t ofs = alignedBegin - addr;
113+
uint32_t nb = (size < ofs) ? size : ofs;
114+
uint8_t tmp[4] __attribute__((aligned(4))) = {0xff, 0xff, 0xff, 0xff};
115+
memcpy(tmp + 4 - ofs, src, nb);
116+
if (!ESP.flashWrite(alignedBegin - 4, (uint32_t*) tmp, 4)) {
118117
DEBUGV("_spif_write(%d) addr=%x size=%x ab=%x ae=%x\r\n",
119118
__LINE__, addr, size, alignedBegin, alignedEnd);
120119
return SPIFFS_ERR_INTERNAL;

0 commit comments

Comments
 (0)