mirror of
				https://github.com/eledio-devices/thirdparty-littlefs.git
				synced 2025-10-31 08:42:40 +01:00 
			
		
		
		
	Changed callbacks to take user-provided context directly
This is a style change to make littlefs's callbacks consistent with most callback declarations found in C. That is, taking in a user-provided `void*`. Previously, these callbacks took a pointer to the config struct itself, which indirectly contained a user provided context, and this gets the job done, but taking in a callback with a `void*` is arguably more expected, has a better chance of integrating with C++/OS-specific code, and is more likely to be optimized out by a clever compiler. --- As a part of these changes, the geometry for the test bds needed to be moved into bd specific configuration objects. This is a good change as it also allows for testing situations where littlefs's geometry does not match the underlying bd.
This commit is contained in:
		| @@ -362,7 +362,7 @@ code = ''' | ||||
|  | ||||
|     // but mark the head of our file as a "bad block", this is force our | ||||
|     // scan to bail early | ||||
|     lfs_testbd_setwear(&cfg, fileblock, 0xffffffff) => 0; | ||||
|     lfs_testbd_setwear(&bd, fileblock, 0xffffffff) => 0; | ||||
|     lfs_file_open(&lfs, &file, "ghost", LFS_O_WRONLY | LFS_O_CREAT) => 0; | ||||
|     strcpy((char*)buffer, "chomp"); | ||||
|     size = strlen("chomp"); | ||||
| @@ -377,7 +377,7 @@ code = ''' | ||||
|  | ||||
|     // now reverse the "bad block" and try to write the file again until we | ||||
|     // run out of space | ||||
|     lfs_testbd_setwear(&cfg, fileblock, 0) => 0; | ||||
|     lfs_testbd_setwear(&bd, fileblock, 0) => 0; | ||||
|     lfs_file_open(&lfs, &file, "ghost", LFS_O_WRONLY | LFS_O_CREAT) => 0; | ||||
|     strcpy((char*)buffer, "chomp"); | ||||
|     size = strlen("chomp"); | ||||
|   | ||||
| @@ -16,8 +16,8 @@ define.NAMEMULT = 64 | ||||
| define.FILEMULT = 1 | ||||
| code = ''' | ||||
|     for (lfs_block_t badblock = 2; badblock < LFS_BLOCK_COUNT; badblock++) { | ||||
|         lfs_testbd_setwear(&cfg, badblock-1, 0) => 0; | ||||
|         lfs_testbd_setwear(&cfg, badblock, 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, badblock-1, 0) => 0; | ||||
|         lfs_testbd_setwear(&bd, badblock, 0xffffffff) => 0; | ||||
|          | ||||
|         lfs_formatcfg(&lfs, &cfg) => 0; | ||||
|  | ||||
| @@ -90,7 +90,7 @@ define.NAMEMULT = 64 | ||||
| define.FILEMULT = 1 | ||||
| code = ''' | ||||
|     for (lfs_block_t i = 0; i < (LFS_BLOCK_COUNT-2)/2; i++) { | ||||
|         lfs_testbd_setwear(&cfg, i+2, 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, i+2, 0xffffffff) => 0; | ||||
|     } | ||||
|      | ||||
|     lfs_formatcfg(&lfs, &cfg) => 0; | ||||
| @@ -163,7 +163,7 @@ define.NAMEMULT = 64 | ||||
| define.FILEMULT = 1 | ||||
| code = ''' | ||||
|     for (lfs_block_t i = 0; i < (LFS_BLOCK_COUNT-2)/2; i++) { | ||||
|         lfs_testbd_setwear(&cfg, (2*i) + 2, 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, (2*i) + 2, 0xffffffff) => 0; | ||||
|     } | ||||
|      | ||||
|     lfs_formatcfg(&lfs, &cfg) => 0; | ||||
| @@ -233,8 +233,8 @@ define.LFS_BADBLOCK_BEHAVIOR = [ | ||||
|     'LFS_TESTBD_BADBLOCK_ERASENOOP', | ||||
| ] | ||||
| code = ''' | ||||
|     lfs_testbd_setwear(&cfg, 0, 0xffffffff) => 0; | ||||
|     lfs_testbd_setwear(&cfg, 1, 0xffffffff) => 0; | ||||
|     lfs_testbd_setwear(&bd, 0, 0xffffffff) => 0; | ||||
|     lfs_testbd_setwear(&bd, 1, 0xffffffff) => 0; | ||||
|  | ||||
|     lfs_formatcfg(&lfs, &cfg) => LFS_ERR_NOSPC; | ||||
|     lfs_mountcfg(&lfs, &cfg) => LFS_ERR_CORRUPT; | ||||
|   | ||||
| @@ -158,12 +158,12 @@ code = ''' | ||||
|     lfs_ctz_fromle32(&ctz); | ||||
|     // rewrite block to contain bad pointer | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, ctz.head, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, ctz.head, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     uint32_t bad = lfs_tole32(0xcccccccc); | ||||
|     memcpy(&bbuffer[0], &bad, sizeof(bad)); | ||||
|     memcpy(&bbuffer[4], &bad, sizeof(bad)); | ||||
|     cfg.erase(&cfg, ctz.head) => 0; | ||||
|     cfg.prog(&cfg, ctz.head, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_erase(&bd, ctz.head) => 0; | ||||
|     lfs_testbd_prog(&bd, ctz.head, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_deinit(&lfs) => 0; | ||||
|  | ||||
|     // test that accessing our bad file fails, note there's a number | ||||
|   | ||||
| @@ -180,7 +180,7 @@ code = ''' | ||||
|  | ||||
|     for (int run = 0; run < 2; run++) { | ||||
|         for (lfs_block_t b = 0; b < LFS_BLOCK_COUNT; b++) { | ||||
|             lfs_testbd_setwear(&cfg, b, | ||||
|             lfs_testbd_setwear(&bd, b, | ||||
|                     (b < run_block_count[run]) ? 0 : LFS_ERASE_CYCLES) => 0; | ||||
|         } | ||||
|  | ||||
| @@ -272,7 +272,7 @@ code = ''' | ||||
|  | ||||
|     for (int run = 0; run < 2; run++) { | ||||
|         for (lfs_block_t b = 0; b < LFS_BLOCK_COUNT; b++) { | ||||
|             lfs_testbd_setwear(&cfg, b, | ||||
|             lfs_testbd_setwear(&bd, b, | ||||
|                     (b < run_block_count[run]) ? 0 : LFS_ERASE_CYCLES) => 0; | ||||
|         } | ||||
|  | ||||
| @@ -434,7 +434,7 @@ exhausted: | ||||
|     lfs_testbd_wear_t maxwear = 0; | ||||
|     // skip 0 and 1 as superblock movement is intentionally avoided | ||||
|     for (lfs_block_t b = 2; b < LFS_BLOCK_COUNT; b++) { | ||||
|         lfs_testbd_wear_t wear = lfs_testbd_getwear(&cfg, b); | ||||
|         lfs_testbd_wear_t wear = lfs_testbd_getwear(&bd, b); | ||||
|         printf("%08x: wear %d\n", b, wear); | ||||
|         assert(wear >= 0); | ||||
|         if (wear < minwear) { | ||||
| @@ -453,7 +453,7 @@ exhausted: | ||||
|     // find standard deviation^2 | ||||
|     lfs_testbd_wear_t dev2 = 0; | ||||
|     for (lfs_block_t b = 2; b < LFS_BLOCK_COUNT; b++) { | ||||
|         lfs_testbd_wear_t wear = lfs_testbd_getwear(&cfg, b); | ||||
|         lfs_testbd_wear_t wear = lfs_testbd_getwear(&bd, b); | ||||
|         assert(wear >= 0); | ||||
|         lfs_testbd_swear_t diff = wear - avgwear; | ||||
|         dev2 += diff*diff; | ||||
|   | ||||
| @@ -98,15 +98,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
|     lfs_dir_open(&lfs, &dir, "a") => 0; | ||||
| @@ -174,15 +174,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     // corrupt the destination | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
| @@ -190,15 +190,15 @@ code = ''' | ||||
|     block = dir.m.pair[0]; | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
|     lfs_dir_open(&lfs, &dir, "a") => 0; | ||||
| @@ -266,15 +266,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     // corrupt the destination | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
| @@ -282,15 +282,15 @@ code = ''' | ||||
|     block = dir.m.pair[0]; | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     // continue move | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
| @@ -536,15 +536,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
|     lfs_dir_open(&lfs, &dir, "a") => 0; | ||||
| @@ -620,15 +620,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     // corrupt the destination | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
| @@ -636,15 +636,15 @@ code = ''' | ||||
|     block = dir.m.pair[0]; | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
|     lfs_dir_open(&lfs, &dir, "a") => 0; | ||||
| @@ -720,15 +720,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     // corrupt the destination | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
| @@ -736,15 +736,15 @@ code = ''' | ||||
|     block = dir.m.pair[0]; | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     // continue move | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
| @@ -1569,14 +1569,14 @@ code = ''' | ||||
|     // force specific directories to relocate | ||||
|     if (RELOCATIONS & 0x1) { | ||||
|         lfs_dir_open(&lfs, &dir, "/parent"); | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_dir_close(&lfs, &dir) => 0; | ||||
|     } | ||||
|     if (RELOCATIONS & 0x2) { | ||||
|         lfs_dir_open(&lfs, &dir, "/parent/child"); | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_dir_close(&lfs, &dir) => 0; | ||||
|     } | ||||
|  | ||||
| @@ -1707,20 +1707,20 @@ code = ''' | ||||
|     // force specific directories to relocate | ||||
|     if (RELOCATIONS & 0x1) { | ||||
|         lfs_dir_open(&lfs, &dir, "/parent"); | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_dir_close(&lfs, &dir) => 0; | ||||
|     } | ||||
|     if (RELOCATIONS & 0x2) { | ||||
|         lfs_dir_open(&lfs, &dir, "/parent/sibling"); | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_dir_close(&lfs, &dir) => 0; | ||||
|     } | ||||
|     if (RELOCATIONS & 0x4) { | ||||
|         lfs_dir_open(&lfs, &dir, "/parent/child"); | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&cfg, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[0], 0xffffffff) => 0; | ||||
|         lfs_testbd_setwear(&bd, dir.m.pair[1], 0xffffffff) => 0; | ||||
|         lfs_dir_close(&lfs, &dir) => 0; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -19,15 +19,15 @@ code = ''' | ||||
|     lfs_dir_close(&lfs, &dir) => 0; | ||||
|     lfs_unmount(&lfs) => 0; | ||||
|     uint8_t bbuffer[LFS_BLOCK_SIZE]; | ||||
|     cfg.read(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_read(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     int off = LFS_BLOCK_SIZE-1; | ||||
|     while (off >= 0 && bbuffer[off] == LFS_ERASE_VALUE) { | ||||
|         off -= 1; | ||||
|     } | ||||
|     memset(&bbuffer[off-3], LFS_BLOCK_SIZE, 3); | ||||
|     cfg.erase(&cfg, block) => 0; | ||||
|     cfg.prog(&cfg, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     cfg.sync(&cfg) => 0; | ||||
|     lfs_testbd_erase(&bd, block) => 0; | ||||
|     lfs_testbd_prog(&bd, block, 0, bbuffer, LFS_BLOCK_SIZE) => 0; | ||||
|     lfs_testbd_sync(&bd) => 0; | ||||
|  | ||||
|     lfs_mountcfg(&lfs, &cfg) => 0; | ||||
|     lfs_stat(&lfs, "parent/orphan", &info) => LFS_ERR_NOENT; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user