mirror of
https://github.com/pellepl/spiffs.git
synced 2026-09-11 19:50:02 +00:00
SPIFFS_probe_nbr_of_blocks redefined as SPIFFS_probe_fs and made more safe.
New API functions: SPIFFS_probe_fs Deleted API functions: SPIFFS_probe_nbr_of_blocks
This commit is contained in:
@@ -29,6 +29,12 @@ MKDIR = mkdir -p
|
||||
#
|
||||
###############
|
||||
|
||||
NO_TEST ?= 0
|
||||
CFLAGS = $(FLAGS)
|
||||
ifeq (1, $(strip $(NO_TEST)))
|
||||
CFILES_TEST = main.c
|
||||
CFLAGS += -DNO_TEST
|
||||
else
|
||||
CFILES_TEST = main.c \
|
||||
test_spiffs.c \
|
||||
test_dev.c \
|
||||
@@ -37,6 +43,7 @@ CFILES_TEST = main.c \
|
||||
test_bugreports.c \
|
||||
testsuites.c \
|
||||
testrunner.c
|
||||
endif
|
||||
include files.mk
|
||||
INCLUDE_DIRECTIVES = -I./${sourcedir} -I./${sourcedir}/default -I./${sourcedir}/test
|
||||
COMPILEROPTIONS = $(INCLUDE_DIRECTIVES)
|
||||
@@ -68,6 +75,10 @@ DEPENDENCIES = $(DEPFILES)
|
||||
$(BINARY): $(ALLOBJFILES)
|
||||
@echo "... linking"
|
||||
@${CC} $(LINKEROPTIONS) -o ${builddir}/$(BINARY) $(ALLOBJFILES) $(LIBS)
|
||||
ifeq (1, $(strip $(NO_TEST)))
|
||||
@echo "size: `du -b ${builddir}/${BINARY} | sed 's/\([0-9]*\).*/\1/g '` bytes"
|
||||
endif
|
||||
|
||||
|
||||
-include $(DEPENDENCIES)
|
||||
|
||||
@@ -78,12 +89,12 @@ $(OBJFILES) : ${builddir}/%.o:%.c
|
||||
|
||||
$(OBJFILES_TEST) : ${builddir}/%.o:%.c
|
||||
@echo "... compile $@"
|
||||
@${CC} -g -c -o $@ $<
|
||||
@${CC} $(CFLAGS) -g -c -o $@ $<
|
||||
|
||||
# make dependencies
|
||||
# @echo "... depend $@";
|
||||
$(DEPFILES) : ${builddir}/%.d:%.c
|
||||
@echo "... depend $@"; \
|
||||
rm -f $@; \
|
||||
@rm -f $@; \
|
||||
${CC} $(COMPILEROPTIONS) -M $< > $@.$$$$; \
|
||||
sed 's,\($*\)\.o[ :]*, ${builddir}/\1.o $@ : ,g' < $@.$$$$ > $@; \
|
||||
rm -f $@.$$$$
|
||||
@@ -113,20 +124,20 @@ clean:
|
||||
@rm -f ${builddir}/*.elf
|
||||
|
||||
build-all:
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) CFLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1"
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=0" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=0 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=0 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=0 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
$(MAKE) clean && $(MAKE) FLAGS="-DSPIFFS_HAL_CALLBACK_EXTRA=1 -DSPIFFS_SINGLETON=1 -DSPIFFS_CACHE=1 -DSPIFFS_READ_ONLY=1" NO_TEST=1
|
||||
|
||||
+26
-18
@@ -52,7 +52,8 @@ extern "C" {
|
||||
#define SPIFFS_ERR_NOT_A_FILE -10031
|
||||
#define SPIFFS_ERR_RO_NOT_IMPL -10032
|
||||
#define SPIFFS_ERR_RO_ABORTED_OPERATION -10033
|
||||
|
||||
#define SPIFFS_ERR_PROBE_TOO_FEW_BLOCKS -10034
|
||||
#define SPIFFS_ERR_PROBE_NOT_A_FS -10035
|
||||
#define SPIFFS_ERR_INTERNAL -10050
|
||||
|
||||
#define SPIFFS_ERR_TEST -10100
|
||||
@@ -284,32 +285,39 @@ typedef struct {
|
||||
|
||||
// functions
|
||||
|
||||
#if SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH
|
||||
#if SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH && SPIFFS_SINGLETON==0
|
||||
/**
|
||||
* Special function. This takes a spiffs config struct and returns
|
||||
* the number of blocks this file system was formatted with.
|
||||
* This function relies on following in the passed config struct:
|
||||
* hal_read_f, phys_addr, and log_page_size.
|
||||
* Special function. This takes a spiffs config struct and returns the number
|
||||
* of blocks this file system was formatted with. This function relies on
|
||||
* that following info is set correctly in given config struct:
|
||||
*
|
||||
* Do note, that caution should be taken with the value returned here.
|
||||
* phys_addr, log_page_size, and log_block_size.
|
||||
*
|
||||
* There is no check whatsoever that the flash actually contains a file
|
||||
* system - meaning that just any number could be returned.
|
||||
* Also, hal_read_f must be set in the config struct.
|
||||
*
|
||||
* There is neither any check that the configuration is set correctly.
|
||||
* The block size may for instance differ.
|
||||
* One must be sure of the correct page size and that the physical address is
|
||||
* correct in the probed file system when calling this function. It is not
|
||||
* checked if the phys_addr actually points to the start of the file system,
|
||||
* so one might get a false positive if entering a phys_addr somewhere in the
|
||||
* middle of the file system at block boundary. In addition, it is not checked
|
||||
* if the page size is actually correct. If it is not, weird file system sizes
|
||||
* will be returned.
|
||||
*
|
||||
* One must be sure of the page size and the physical address when
|
||||
* calling this function.
|
||||
* If this function detects a file system it returns the assumed file system
|
||||
* size, which can be used to set the phys_size.
|
||||
*
|
||||
* The resulting value can then be used to set the config structs
|
||||
* phys_size by multiplying it with the known block size.
|
||||
* Otherwise, it returns an error indicating why it is not regarded as a file
|
||||
* system.
|
||||
*
|
||||
* Note: this function is not protected with SPIFFS_LOCK and SPIFFS_UNLOCK
|
||||
* macros. It returns the error code directly, instead of as read by
|
||||
* SPIFFS_errno.
|
||||
*
|
||||
* @param config essential parts of the physical and logical
|
||||
* configuration of the file system
|
||||
* configuration of the file system.
|
||||
*/
|
||||
s32_t SPIFFS_probe_nbr_of_blocks(spiffs_config *config);
|
||||
#endif // SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH
|
||||
s32_t SPIFFS_probe_fs(spiffs_config *config);
|
||||
#endif // SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH && SPIFFS_SINGLETON==0
|
||||
|
||||
/**
|
||||
* Initializes the file system dynamic parameters and mounts the filesystem.
|
||||
|
||||
@@ -66,16 +66,14 @@ s32_t SPIFFS_format(spiffs *fs) {
|
||||
#endif // SPIFFS_READ_ONLY
|
||||
}
|
||||
|
||||
#if SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH
|
||||
#if SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH && SPIFFS_SINGLETON==0
|
||||
|
||||
s32_t SPIFFS_probe_nbr_of_blocks(spiffs_config *config) {
|
||||
SPIFFS_LOCK(fs);
|
||||
s32_t block_count = spiffs_probe(config);
|
||||
SPIFFS_UNLOCK(fs);
|
||||
return block_count;
|
||||
s32_t SPIFFS_probe_fs(spiffs_config *config) {
|
||||
s32_t res = spiffs_probe(config);
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif // SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH
|
||||
#endif // SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH && SPIFFS_SINGLETON==0
|
||||
|
||||
s32_t SPIFFS_mount(spiffs *fs, spiffs_config *config, u8_t *work,
|
||||
u8_t *fd_space, u32_t fd_space_size,
|
||||
|
||||
+44
-15
@@ -264,28 +264,57 @@ s32_t spiffs_erase_block(
|
||||
}
|
||||
#endif // !SPIFFS_READ_ONLY
|
||||
|
||||
#if SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH
|
||||
#if SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH && SPIFFS_SINGLETON==0
|
||||
s32_t spiffs_probe(
|
||||
spiffs_config *cfg) {
|
||||
s32_t res;
|
||||
u32_t paddr;
|
||||
spiffs dummy_fs; // create a dummy fs struct just to be able to use macros
|
||||
memcpy(&dummy_fs.cfg, cfg, sizeof(spiffs_config));
|
||||
spiffs_obj_id magic;
|
||||
u32_t paddr = SPIFFS_MAGIC_PADDR(&dummy_fs, (spiffs_block_ix)0);
|
||||
#if SPIFFS_HAL_CALLBACK_EXTRA
|
||||
// not any proper fs to report here, so callback with null
|
||||
// (cross fingers that no-one gets angry)
|
||||
res = cfg->hal_read_f((void *)0, paddr, sizeof(spiffs_obj_id), (u8_t *)&magic);
|
||||
#else
|
||||
res = cfg->hal_read_f(paddr, sizeof(spiffs_obj_id), (u8_t *)&magic);
|
||||
#endif
|
||||
SPIFFS_CHECK_RES(res);
|
||||
|
||||
// unwind the magic crap to get nbr of blocks
|
||||
dummy_fs.block_count = 0;
|
||||
return SPIFFS_MAGIC(&dummy_fs, 0) ^ magic;
|
||||
|
||||
// Read three magics, as one block may be in an aborted erase state.
|
||||
// At least two of these must contain magic and be in decreasing order.
|
||||
spiffs_obj_id magic[3];
|
||||
spiffs_obj_id bix_count[3];
|
||||
|
||||
spiffs_block_ix bix;
|
||||
for (bix = 0; bix < 3; bix++) {
|
||||
paddr = SPIFFS_MAGIC_PADDR(&dummy_fs, bix);
|
||||
#if SPIFFS_HAL_CALLBACK_EXTRA
|
||||
// not any proper fs to report here, so callback with null
|
||||
// (cross fingers that no-one gets angry)
|
||||
res = cfg->hal_read_f((void *)0, paddr, sizeof(spiffs_obj_id), (u8_t *)&magic[bix]);
|
||||
#else
|
||||
res = cfg->hal_read_f(paddr, sizeof(spiffs_obj_id), (u8_t *)&magic[bix]);
|
||||
#endif
|
||||
bix_count[bix] = magic[bix] ^ SPIFFS_MAGIC(&dummy_fs, 0);
|
||||
SPIFFS_CHECK_RES(res);
|
||||
}
|
||||
|
||||
// check that we have sane number of blocks
|
||||
if (bix_count[0] < 3) return SPIFFS_ERR_PROBE_TOO_FEW_BLOCKS;
|
||||
// check that the order is correct, take aborted erases in calculation
|
||||
// first block aborted erase
|
||||
if (magic[0] == (spiffs_obj_id)(-1) && bix_count[1] - bix_count[2] == 1) {
|
||||
return (bix_count[1]+1) * cfg->log_block_size;
|
||||
}
|
||||
// second block aborted erase
|
||||
if (magic[1] == (spiffs_obj_id)(-1) && bix_count[0] - bix_count[2] == 2) {
|
||||
return bix_count[0] * cfg->log_block_size;
|
||||
}
|
||||
// third block aborted erase
|
||||
if (magic[2] == (spiffs_obj_id)(-1) && bix_count[0] - bix_count[1] == 1) {
|
||||
return bix_count[0] * cfg->log_block_size;
|
||||
}
|
||||
// no block has aborted erase
|
||||
if (bix_count[0] - bix_count[1] == 1 && bix_count[1] - bix_count[2] == 1) {
|
||||
return bix_count[0] * cfg->log_block_size;
|
||||
}
|
||||
|
||||
return SPIFFS_ERR_PROBE_NOT_A_FS;
|
||||
}
|
||||
#endif // SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH
|
||||
#endif // SPIFFS_USE_MAGIC && SPIFFS_USE_MAGIC_LENGTH && SPIFFS_SINGLETON==0
|
||||
|
||||
|
||||
static s32_t spiffs_obj_lu_scan_v(
|
||||
|
||||
+6
-1
@@ -1,7 +1,12 @@
|
||||
#include "testrunner.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifndef NO_TEST
|
||||
#include "testrunner.h"
|
||||
#endif
|
||||
|
||||
int main(int argc, char **args) {
|
||||
#ifndef NO_TEST
|
||||
run_tests(argc, args);
|
||||
#endif
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
@@ -80,28 +80,81 @@ TEST(magic_length)
|
||||
}
|
||||
TEST_END(magic_length)
|
||||
|
||||
|
||||
#if SPIFFS_SINGLETON==0
|
||||
TEST(magic_length_probe)
|
||||
{
|
||||
fs_reset_specific(0, 0, 65536*16, 65536, 65536, 256);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_nbr_of_blocks(&__fs.cfg), 16);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 65536*16);
|
||||
|
||||
fs_reset_specific(0, 0, 65536*24, 65536, 65536, 256);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_nbr_of_blocks(&__fs.cfg), 24);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 65536*24);
|
||||
|
||||
fs_reset_specific(0, 0, 32768*16, 32768, 32768, 128);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_nbr_of_blocks(&__fs.cfg), 16);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 32768*16);
|
||||
|
||||
fs_reset_specific(0, 0, 16384*37, 16384, 16384, 128);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_nbr_of_blocks(&__fs.cfg), 37);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 16384*37);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*11, 4096, 4096, 256);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_nbr_of_blocks(&__fs.cfg), 11);
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 4096*11);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
__fs.cfg.log_page_size = 128;
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
__fs.cfg.log_page_size = 512;
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
__fs.cfg.log_page_size = 256;
|
||||
__fs.cfg.log_block_size = 8192;
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
__fs.cfg.log_block_size = 2048;
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
__fs.cfg.log_block_size = 4096;
|
||||
__fs.cfg.phys_addr += 2;
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
__fs.cfg.phys_addr += 4096*6;
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_TOO_FEW_BLOCKS);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xff, 4096); // "erase" block 0
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 4096*8);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xff, 4096); // "erase" block 1
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 4096*8);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xff, 4096); // "erase" block 2
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), 4096*8);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xff, 4096*2); // "erase" block 0 & 1
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xff, 4096*2); // "erase" block 0
|
||||
area_set(4096*0, 0xff, 4096); // "erase" block 2
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*1, 0xff, 4096*2); // "erase" block 1 & 2
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xff, 4096*8); // "erase" all
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
|
||||
fs_reset_specific(0, 0, 4096*8, 4096, 4096, 256);
|
||||
area_set(4096*0, 0xdd, 4096*8); // garble all
|
||||
TEST_CHECK_EQ(SPIFFS_probe_fs(&__fs.cfg), SPIFFS_ERR_PROBE_NOT_A_FS);
|
||||
|
||||
return TEST_RES_OK;
|
||||
}
|
||||
TEST_END(magic_length_probe)
|
||||
|
||||
#endif // SPIFFS_SINGLETON==0
|
||||
|
||||
#endif // SPIFFS_USE_MAGIC_LENGTH
|
||||
|
||||
#endif // SPIFFS_USE_MAGIC
|
||||
|
||||
@@ -131,7 +131,6 @@ static s32_t _write(spiffs *fs, u32_t addr, u32_t size, u8_t *src) {
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static s32_t _erase(spiffs *fs, u32_t addr, u32_t size) {
|
||||
if (addr & (__fs.cfg.phys_erase_block-1)) {
|
||||
printf("trying to erase at addr %08x, out of boundary\n", addr);
|
||||
@@ -235,6 +234,13 @@ void area_write(u32_t addr, u8_t *buf, u32_t size) {
|
||||
}
|
||||
}
|
||||
|
||||
void area_set(u32_t addr, u8_t d, u32_t size) {
|
||||
int i;
|
||||
for (i = 0; i < size; i++) {
|
||||
AREA(addr + i) = d;
|
||||
}
|
||||
}
|
||||
|
||||
void area_read(u32_t addr, u8_t *buf, u32_t size) {
|
||||
int i;
|
||||
for (i = 0; i < size; i++) {
|
||||
|
||||
@@ -71,6 +71,7 @@ void hexdump(u32_t addr, u32_t len);
|
||||
char *make_test_fname(const char *name);
|
||||
void clear_test_path();
|
||||
void area_write(u32_t addr, u8_t *buf, u32_t size);
|
||||
void area_set(u32_t addr, u8_t d, u32_t size);
|
||||
void area_read(u32_t addr, u8_t *buf, u32_t size);
|
||||
void dump_erase_counts(spiffs *fs);
|
||||
void dump_flash_access_stats();
|
||||
|
||||
Reference in New Issue
Block a user