1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-06 05:21:22 +03:00

Fix short unaligned writes in SPIFFS HAL, 2nd attempt (#924)

This commit is contained in:
Ivan Grokhotkov 2015-10-26 14:50:50 +03:00
parent 405b23876c
commit 56bd4a78b3

View File

@ -109,12 +109,11 @@ int32_t spiffs_hal_write(uint32_t addr, uint32_t size, uint8_t *src) {
}
if (addr < alignedBegin) {
uint32_t nb = alignedBegin - addr;
if (nb > size)
nb = size;
uint32_t tmp = 0xffffffff;
memcpy(((uint8_t* )&tmp) + 4 - nb, src, nb);
if (!ESP.flashWrite(alignedBegin - 4, &tmp, 4)) {
uint32_t ofs = alignedBegin - addr;
uint32_t nb = (size < ofs) ? size : ofs;
uint8_t tmp[4] __attribute__((aligned(4))) = {0xff, 0xff, 0xff, 0xff};
memcpy(tmp + 4 - ofs, src, nb);
if (!ESP.flashWrite(alignedBegin - 4, (uint32_t*) tmp, 4)) {
DEBUGV("_spif_write(%d) addr=%x size=%x ab=%x ae=%x\r\n",
__LINE__, addr, size, alignedBegin, alignedEnd);
return SPIFFS_ERR_INTERNAL;