diff --git a/lfs.c b/lfs.c index ec3bdb2c..2437b0fe 100644 --- a/lfs.c +++ b/lfs.c @@ -7052,6 +7052,10 @@ static inline bool lfsr_a_islazy(uint32_t flags) { } // traversal flags +static inline bool lfsr_t_isrdonly(uint32_t flags) { + return flags & LFS_T_RDONLY; +} + static inline bool lfsr_t_ismtreeonly(uint32_t flags) { return flags & LFS_T_MTREEONLY; } @@ -10259,7 +10263,7 @@ static lfs_sblock_t lfs_alloc(lfs_t *lfs, bool erase) { // in-use in the next lookahead window // lfsr_traversal_t t; - lfsr_traversal_init(&t, LFS_T_LOOKAHEAD); + lfsr_traversal_init(&t, LFS_T_RDONLY | LFS_T_LOOKAHEAD); while (true) { lfsr_tag_t tag; lfsr_bptr_t bptr; @@ -13753,7 +13757,8 @@ int lfsr_file_ckmeta(lfs_t *lfs, lfsr_file_t *file) { // can't read from writeonly files LFS_ASSERT(!lfsr_o_iswronly(file->b.o.flags)); - return lfsr_file_ck(lfs, file, LFS_T_CKMETA); + return lfsr_file_ck(lfs, file, + LFS_T_RDONLY | LFS_T_CKMETA); } int lfsr_file_ckdata(lfs_t *lfs, lfsr_file_t *file) { @@ -13761,7 +13766,8 @@ int lfsr_file_ckdata(lfs_t *lfs, lfsr_file_t *file) { // can't read from writeonly files LFS_ASSERT(!lfsr_o_iswronly(file->b.o.flags)); - return lfsr_file_ck(lfs, file, LFS_T_CKMETA | LFS_T_CKDATA); + return lfsr_file_ck(lfs, file, + LFS_T_RDONLY | LFS_T_CKMETA | LFS_T_CKDATA); } @@ -14453,7 +14459,7 @@ static int lfsr_mountinited(lfs_t *lfs) { // mdirs are valid if we haven't checked the btree inner nodes at // least once? lfsr_traversal_t t; - lfsr_traversal_init(&t, LFS_T_MTREEONLY | LFS_T_CKMETA); + lfsr_traversal_init(&t, LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA); while (true) { lfsr_tag_t tag; lfsr_bptr_t bptr; @@ -14970,7 +14976,7 @@ int lfsr_fs_stat(lfs_t *lfs, struct lfs_fsinfo *fsinfo) { lfs_ssize_t lfsr_fs_usage(lfs_t *lfs) { lfs_size_t count = 0; lfsr_traversal_t t; - lfsr_traversal_init(&t, 0); + lfsr_traversal_init(&t, LFS_T_RDONLY); while (true) { lfsr_tag_t tag; lfsr_bptr_t bptr; @@ -15107,7 +15113,8 @@ failed:; static int lfsr_fs_fixorphans(lfs_t *lfs) { // LFS_T_MKCONSISTENT really just removes orphans lfsr_traversal_t t; - lfsr_traversal_init(&t, LFS_T_MTREEONLY | LFS_T_MKCONSISTENT); + lfsr_traversal_init(&t, + LFS_T_RDWR | LFS_T_MTREEONLY | LFS_T_MKCONSISTENT); while (true) { lfsr_bptr_t bptr; int err = lfsr_mtree_gc(lfs, &t, @@ -15172,11 +15179,11 @@ static int lfsr_fs_ck(lfs_t *lfs, uint32_t flags) { } int lfsr_fs_ckmeta(lfs_t *lfs) { - return lfsr_fs_ck(lfs, LFS_T_CKMETA); + return lfsr_fs_ck(lfs, LFS_T_RDONLY | LFS_T_CKMETA); } int lfsr_fs_ckdata(lfs_t *lfs) { - return lfsr_fs_ck(lfs, LFS_T_CKMETA | LFS_T_CKDATA); + return lfsr_fs_ck(lfs, LFS_T_RDONLY | LFS_T_CKMETA | LFS_T_CKDATA); } // get the filesystem checksum @@ -15398,16 +15405,20 @@ int lfsr_traversal_open(lfs_t *lfs, lfsr_traversal_t *t, uint32_t flags) { LFS_ASSERT(!lfsr_omdir_isopen(lfs, &t->b.o)); // unknown flags? LFS_ASSERT((flags & ~( - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_RDWR + | LFS_T_MTREEONLY | LFS_T_MKCONSISTENT | LFS_T_LOOKAHEAD | LFS_T_COMPACT | LFS_T_CKMETA | LFS_T_CKDATA)) == 0); - // these flags require a writable filesystem - LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || !lfsr_t_ismkconsistent(flags)); - LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || !lfsr_t_islookahead(flags)); - LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || !lfsr_t_iscompact(flags)); + // writeable traversals require a writeable filesystem + LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || lfsr_t_isrdonly(flags)); + // these flags require a writable traversal + LFS_ASSERT(!lfsr_t_isrdonly(flags) || !lfsr_t_ismkconsistent(flags)); + LFS_ASSERT(!lfsr_t_isrdonly(flags) || !lfsr_t_islookahead(flags)); + LFS_ASSERT(!lfsr_t_isrdonly(flags) || !lfsr_t_iscompact(flags)); // some flags don't make sense when only traversing the mtree LFS_ASSERT(!lfsr_t_ismtreeonly(flags) || !lfsr_t_islookahead(flags)); LFS_ASSERT(!lfsr_t_ismtreeonly(flags) || !lfsr_t_isckdata(flags)); diff --git a/lfs.h b/lfs.h index 58d86de5..0d76d206 100644 --- a/lfs.h +++ b/lfs.h @@ -270,7 +270,10 @@ enum lfs_btype { }; // Traversal flags -#define LFS_T_MTREEONLY 0x00000004 // Only traverse the mtree +#define LFS_T_MODE 1 // The traversal's access mode +#define LFS_T_RDWR 0 // Open traversal as read and write +#define LFS_T_RDONLY 1 // Open traversal as read only +#define LFS_T_MTREEONLY 0x00000002 // Only traverse the mtree #define LFS_T_MKCONSISTENT \ 0x00000100 // Make the filesystem consistent #define LFS_T_LOOKAHEAD 0x00000200 // Populate lookahead buffer diff --git a/scripts/dbgflags.py b/scripts/dbgflags.py index 6cc1d473..7f514ed1 100755 --- a/scripts/dbgflags.py +++ b/scripts/dbgflags.py @@ -126,7 +126,10 @@ FLAGS = [ ('i', 'INMTREE', 0x08000000, "Committing to mtree" ), # Traversal flags - ('T', 'MTREEONLY', 0x00000004, "Only traverse the mtree" ), + ('T', 'MODE', 1, "The traversal's access mode" ), + ('^', 'RDWR', 0, "Open traversal as read and write" ), + ('^', 'RDONLY', 1, "Open traversal as read only" ), + ('T', 'MTREEONLY', 0x00000002, "Only traverse the mtree" ), ('T', 'MKCONSISTENT', 0x00000100, "Make the filesystem consistent" ), ('T', 'LOOKAHEAD', 0x00000200, "Populate lookahead buffer" ), diff --git a/tests/test_alloc.toml b/tests/test_alloc.toml index 87cedd46..6927c0ce 100644 --- a/tests/test_alloc.toml +++ b/tests/test_alloc.toml @@ -182,7 +182,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - (CKMETA) ? LFS_T_CKMETA : 0); + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops assert(i < 2*BLOCK_COUNT); @@ -352,7 +353,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - ((CKMETA) ? LFS_T_CKMETA : 0)); + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops assert(i < 2*BLOCK_COUNT); @@ -508,7 +510,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - ((CKMETA) ? LFS_T_CKMETA : 0)); + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops assert(i < 2*BLOCK_COUNT); diff --git a/tests/test_ck.toml b/tests/test_ck.toml index f2cc865a..2068ec35 100644 --- a/tests/test_ck.toml +++ b/tests/test_ck.toml @@ -231,7 +231,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -283,7 +283,7 @@ code = ''' // find clobbered blocks with lfsr_traversal_read } else if (METHOD == 2) { lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -368,7 +368,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -421,7 +421,7 @@ code = ''' // find clobbered blocks with lfsr_traversal_read } else if (METHOD == 2) { lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_CKDATA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKDATA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -510,7 +510,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; lfs_block_t badblock; for (lfs_block_t j = 0;; j++) { @@ -573,7 +573,8 @@ code = ''' // find clobbered blocks with lfsr_traversal_read } else if (METHOD == 2) { lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -764,7 +765,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; lfs_block_t badblock; for (lfs_block_t j = 0;; j++) { @@ -828,7 +829,8 @@ code = ''' // find clobbered blocks with lfsr_traversal_read } else if (METHOD == 2) { lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_CKDATA) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDONLY | LFS_T_CKDATA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -1006,7 +1008,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1103,7 +1105,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1207,7 +1209,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; lfs_block_t badblock; for (lfs_block_t j = 0;; j++) { @@ -1355,7 +1357,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; lfs_block_t badblock; for (lfs_block_t j = 0;; j++) { @@ -1577,7 +1579,7 @@ code = ''' // find the data block lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t badblock; while (true) { struct lfs_tinfo tinfo; @@ -1688,7 +1690,7 @@ code = ''' // find the btree block lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t badblock; while (true) { struct lfs_tinfo tinfo; @@ -2085,7 +2087,7 @@ code = ''' // find the data block lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t badblock; while (true) { struct lfs_tinfo tinfo; @@ -2196,7 +2198,7 @@ code = ''' // find the btree block lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t badblock; while (true) { struct lfs_tinfo tinfo; @@ -2459,7 +2461,7 @@ code = ''' // find the btree block lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t badblock; while (true) { struct lfs_tinfo tinfo; @@ -2601,7 +2603,7 @@ code = ''' // find the data block lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t badblock; while (true) { struct lfs_tinfo tinfo; @@ -2830,7 +2832,7 @@ code = ''' // need an explicit traversal for this lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; + LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -3148,7 +3150,7 @@ code = ''' // need an explicit traversal for this lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; + LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -3564,7 +3566,7 @@ code = ''' // need an explicit traversal for this lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; + LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -3847,7 +3849,7 @@ code = ''' // need an explicit traversal for this lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; + LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); @@ -4447,7 +4449,7 @@ code = ''' // need an explicit traversal for this lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; + LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops LFS_ASSERT(i < 2*BLOCK_COUNT); diff --git a/tests/test_gc.toml b/tests/test_gc.toml index 92a1438a..ea00c5f4 100644 --- a/tests/test_gc.toml +++ b/tests/test_gc.toml @@ -710,7 +710,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -810,7 +810,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -912,7 +912,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -999,7 +999,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1118,7 +1118,7 @@ code = ''' // run lfsr_traversal_t } else if (AFTER == 2) { lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, GC_FLAGS) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDWR | GC_FLAGS) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1152,7 +1152,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1281,7 +1281,7 @@ code = ''' // run lfsr_traversal_t } else if (AFTER == 2) { lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, GC_FLAGS) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDWR | GC_FLAGS) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1315,7 +1315,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1471,7 +1471,7 @@ code = ''' } lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, GC_FLAGS) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDWR | GC_FLAGS) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1506,7 +1506,8 @@ code = ''' if (LOOKAHEAD) { // we need an explicit traversal for this lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_LOOKAHEAD) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDWR | LFS_T_LOOKAHEAD) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1521,7 +1522,8 @@ code = ''' if (COMPACT) { // we need an explicit traversal for this lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_COMPACT) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDWR | LFS_T_COMPACT) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1658,7 +1660,7 @@ code = ''' } lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, GC_FLAGS) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDWR | GC_FLAGS) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1693,7 +1695,8 @@ code = ''' if (LOOKAHEAD) { // we need an explicit traversal for this lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_LOOKAHEAD) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDWR | LFS_T_LOOKAHEAD) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1708,7 +1711,8 @@ code = ''' if (COMPACT) { // we need an explicit traversal for this lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_COMPACT) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDWR | LFS_T_COMPACT) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1785,7 +1789,7 @@ code = ''' } lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, GC_FLAGS) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDWR | GC_FLAGS) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1820,7 +1824,8 @@ code = ''' if (LOOKAHEAD) { // we need an explicit traversal for this lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_LOOKAHEAD) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDWR | LFS_T_LOOKAHEAD) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); @@ -1835,7 +1840,8 @@ code = ''' if (COMPACT) { // we need an explicit traversal for this lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, LFS_T_COMPACT) => 0; + lfsr_traversal_open(&lfs, &t, + LFS_T_RDWR | LFS_T_COMPACT) => 0; while (true) { struct lfs_tinfo tinfo; int err = lfsr_traversal_read(&lfs, &t, &tinfo); diff --git a/tests/test_mount.toml b/tests/test_mount.toml index ab0dce2d..c61f6701 100644 --- a/tests/test_mount.toml +++ b/tests/test_mount.toml @@ -403,7 +403,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -492,7 +492,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); diff --git a/tests/test_mtree.toml b/tests/test_mtree.toml index be796f8d..5747e33d 100644 --- a/tests/test_mtree.toml +++ b/tests/test_mtree.toml @@ -3490,7 +3490,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -3607,7 +3608,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -3750,7 +3752,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -3916,7 +3919,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -4060,7 +4064,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -4182,7 +4187,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -4346,7 +4352,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY + LFS_T_RDONLY + | LFS_T_MTREEONLY | ((CKMETA) ? LFS_T_CKMETA : 0)); for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -4474,7 +4481,7 @@ code = ''' // technically, cycle detection only needs to work when we're validating lfsr_traversal_t t; lfsr_traversal_init(&t, - LFS_T_MTREEONLY | LFS_T_CKMETA); + LFS_T_RDONLY | LFS_T_MTREEONLY | LFS_T_CKMETA); for (lfs_block_t i = 0;; i++) { // assert that we detect the cycle in a reasonable number of iterations assert(i < 2*BLOCK_COUNT); diff --git a/tests/test_traversal.toml b/tests/test_traversal.toml index fe4f2f66..028e51c5 100644 --- a/tests/test_traversal.toml +++ b/tests/test_traversal.toml @@ -22,7 +22,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -55,7 +56,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -97,7 +99,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -148,7 +151,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((CKMETA) ? LFS_T_CKMETA : 0) + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -269,7 +273,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((CKMETA) ? LFS_T_CKMETA : 0) + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -383,7 +388,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((CKMETA) ? LFS_T_CKMETA : 0) + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; for (lfs_block_t i = 0;; i++) { // a bit hacky, but this catches infinite loops @@ -499,7 +505,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((CKMETA) ? LFS_T_CKMETA : 0) + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; lfs_block_t r = 0; for (lfs_block_t i = 0;; i++) { @@ -629,7 +636,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((CKMETA) ? LFS_T_CKMETA : 0) + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; lfs_block_t r = 0; for (lfs_block_t i = 0;; i++) { @@ -752,7 +760,8 @@ code = ''' lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((CKMETA) ? LFS_T_CKMETA : 0) + LFS_T_RDONLY + | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; lfs_block_t r = 0; for (lfs_block_t i = 0;; i++) { @@ -875,7 +884,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -909,7 +918,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -971,7 +980,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1005,7 +1014,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1066,7 +1075,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1103,7 +1112,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1149,7 +1158,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1181,7 +1190,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1243,7 +1252,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1275,7 +1284,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1336,7 +1345,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1371,7 +1380,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKMETA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKMETA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1417,7 +1426,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1449,7 +1458,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKDATA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKDATA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1511,7 +1520,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1543,7 +1552,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKDATA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKDATA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1604,7 +1613,7 @@ code = ''' // traverse to find blocks lfsr_traversal_t t; - lfsr_traversal_open(&lfs, &t, 0) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0; lfs_block_t k = 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1639,7 +1648,7 @@ code = ''' clobbered:; // traverse again, we should detect the clobbered metadata - lfsr_traversal_open(&lfs, &t, LFS_T_CKDATA) => 0; + lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY | LFS_T_CKDATA) => 0; for (lfs_block_t j = 0;; j++) { assert(j < 2*BLOCK_COUNT); @@ -1689,7 +1698,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -1731,7 +1741,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -1793,7 +1804,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; struct lfs_tinfo tinfo; @@ -1866,7 +1878,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -1925,7 +1938,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -1984,7 +1998,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2058,7 +2073,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2139,7 +2155,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2231,7 +2248,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2319,7 +2337,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2420,7 +2439,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2515,7 +2535,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2605,7 +2626,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2708,7 +2730,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2806,7 +2829,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -2903,7 +2927,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3013,7 +3038,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3115,7 +3141,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3212,7 +3239,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3315,7 +3343,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3404,7 +3433,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3517,7 +3547,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3639,7 +3670,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3749,7 +3781,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3848,7 +3881,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -3955,7 +3989,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -4068,7 +4103,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -4209,7 +4245,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -4384,7 +4421,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -4566,7 +4604,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -4748,7 +4787,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -4921,7 +4961,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -5106,7 +5147,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -5285,7 +5327,8 @@ code = ''' // try traversing lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) + LFS_T_RDWR + | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -5434,7 +5477,8 @@ code = ''' // try traversing and compacting lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_COMPACT + LFS_T_RDWR + | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -5564,7 +5608,8 @@ code = ''' // try traversing and compacting lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_COMPACT + LFS_T_RDWR + | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -5686,7 +5731,8 @@ code = ''' // try traversing and compacting lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_COMPACT + LFS_T_RDWR + | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -5827,7 +5873,8 @@ code = ''' // try traversing and compacting lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_COMPACT + LFS_T_RDWR + | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -6035,7 +6082,8 @@ code = ''' // try traversing and compacting lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_COMPACT + LFS_T_RDWR + | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -6257,7 +6305,8 @@ code = ''' // try traversing and compacting lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_COMPACT + LFS_T_RDWR + | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -6447,7 +6496,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -6570,7 +6620,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -6734,7 +6785,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -6894,7 +6946,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -7055,7 +7108,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -7224,7 +7278,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; @@ -7411,7 +7466,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -7584,7 +7640,8 @@ code = ''' // try traversing with mkconsistent lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - LFS_T_MKCONSISTENT + LFS_T_RDWR + | LFS_T_MKCONSISTENT | LFS_T_COMPACT | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -7711,7 +7768,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -7828,7 +7886,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -8012,7 +8071,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -8124,7 +8184,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -8399,7 +8460,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -8541,7 +8603,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0) @@ -8992,7 +9055,8 @@ code = ''' // open a traversal lfsr_traversal_t t; lfsr_traversal_open(&lfs, &t, - ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) + LFS_T_RDWR + | ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((COMPACT) ? LFS_T_COMPACT : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)