Added LFS_T_RDONLY, LFS_T_RDWR, etc

These mimic the relevant LFS_O_* flags, and allow users to assert
whether or not a traversal will mutate the filesystem:

  LFS_T_MODE          0x00000001  The traversal's access mode
  LFS_T_RDWR          0x00000000  Open traversal as read and write
  LFS_T_RDONLY        0x00000001  Open traversal as read only

In theory, these could also change internal allocations, but littlefs
doesn't really work that way.

Note we _don't_ add related LFS_GC_RDONLY, LFS_GC_RDWR, etc flags. These
are sort of implied by the relevant LFS_M_* flags.

Adds a bit more code, probably because of the slightly more complicated
internal constants for the internal traversals. But I think the
self-documentingness is worth it:

           code          stack          ctx
  before: 37200           2288          636
  after:  37220 (+0.1%)   2288 (+0.0%)  636 (+0.0%)
This commit is contained in:
Christopher Haster
2025-05-24 22:57:35 -05:00
parent 5b74aafa17
commit f7e17c8aad
9 changed files with 249 additions and 150 deletions

37
lfs.c
View File

@@ -7052,6 +7052,10 @@ static inline bool lfsr_a_islazy(uint32_t flags) {
} }
// traversal 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) { static inline bool lfsr_t_ismtreeonly(uint32_t flags) {
return flags & LFS_T_MTREEONLY; 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 // in-use in the next lookahead window
// //
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, LFS_T_LOOKAHEAD); lfsr_traversal_init(&t, LFS_T_RDONLY | LFS_T_LOOKAHEAD);
while (true) { while (true) {
lfsr_tag_t tag; lfsr_tag_t tag;
lfsr_bptr_t bptr; 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 // can't read from writeonly files
LFS_ASSERT(!lfsr_o_iswronly(file->b.o.flags)); 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) { 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 // can't read from writeonly files
LFS_ASSERT(!lfsr_o_iswronly(file->b.o.flags)); 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 // mdirs are valid if we haven't checked the btree inner nodes at
// least once? // least once?
lfsr_traversal_t t; 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) { while (true) {
lfsr_tag_t tag; lfsr_tag_t tag;
lfsr_bptr_t bptr; 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_ssize_t lfsr_fs_usage(lfs_t *lfs) {
lfs_size_t count = 0; lfs_size_t count = 0;
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, 0); lfsr_traversal_init(&t, LFS_T_RDONLY);
while (true) { while (true) {
lfsr_tag_t tag; lfsr_tag_t tag;
lfsr_bptr_t bptr; lfsr_bptr_t bptr;
@@ -15107,7 +15113,8 @@ failed:;
static int lfsr_fs_fixorphans(lfs_t *lfs) { static int lfsr_fs_fixorphans(lfs_t *lfs) {
// LFS_T_MKCONSISTENT really just removes orphans // LFS_T_MKCONSISTENT really just removes orphans
lfsr_traversal_t t; 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) { while (true) {
lfsr_bptr_t bptr; lfsr_bptr_t bptr;
int err = lfsr_mtree_gc(lfs, &t, 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) { 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) { 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 // 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)); LFS_ASSERT(!lfsr_omdir_isopen(lfs, &t->b.o));
// unknown flags? // unknown flags?
LFS_ASSERT((flags & ~( LFS_ASSERT((flags & ~(
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_RDWR
| LFS_T_MTREEONLY
| LFS_T_MKCONSISTENT | LFS_T_MKCONSISTENT
| LFS_T_LOOKAHEAD | LFS_T_LOOKAHEAD
| LFS_T_COMPACT | LFS_T_COMPACT
| LFS_T_CKMETA | LFS_T_CKMETA
| LFS_T_CKDATA)) == 0); | LFS_T_CKDATA)) == 0);
// these flags require a writable filesystem // writeable traversals require a writeable filesystem
LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || !lfsr_t_ismkconsistent(flags)); LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || lfsr_t_isrdonly(flags));
LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || !lfsr_t_islookahead(flags)); // these flags require a writable traversal
LFS_ASSERT(!lfsr_m_isrdonly(lfs->flags) || !lfsr_t_iscompact(flags)); 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 // 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_islookahead(flags));
LFS_ASSERT(!lfsr_t_ismtreeonly(flags) || !lfsr_t_isckdata(flags)); LFS_ASSERT(!lfsr_t_ismtreeonly(flags) || !lfsr_t_isckdata(flags));

5
lfs.h
View File

@@ -270,7 +270,10 @@ enum lfs_btype {
}; };
// Traversal flags // 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 \ #define LFS_T_MKCONSISTENT \
0x00000100 // Make the filesystem consistent 0x00000100 // Make the filesystem consistent
#define LFS_T_LOOKAHEAD 0x00000200 // Populate lookahead buffer #define LFS_T_LOOKAHEAD 0x00000200 // Populate lookahead buffer

View File

@@ -126,7 +126,10 @@ FLAGS = [
('i', 'INMTREE', 0x08000000, "Committing to mtree" ), ('i', 'INMTREE', 0x08000000, "Committing to mtree" ),
# Traversal flags # 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', ('T', 'MKCONSISTENT',
0x00000100, "Make the filesystem consistent" ), 0x00000100, "Make the filesystem consistent" ),
('T', 'LOOKAHEAD', 0x00000200, "Populate lookahead buffer" ), ('T', 'LOOKAHEAD', 0x00000200, "Populate lookahead buffer" ),

View File

@@ -182,7 +182,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
assert(i < 2*BLOCK_COUNT); assert(i < 2*BLOCK_COUNT);
@@ -352,7 +353,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
assert(i < 2*BLOCK_COUNT); assert(i < 2*BLOCK_COUNT);
@@ -508,7 +510,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
assert(i < 2*BLOCK_COUNT); assert(i < 2*BLOCK_COUNT);

View File

@@ -231,7 +231,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -283,7 +283,7 @@ code = '''
// find clobbered blocks with lfsr_traversal_read // find clobbered blocks with lfsr_traversal_read
} else if (METHOD == 2) { } else if (METHOD == 2) {
lfsr_traversal_t t; 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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -368,7 +368,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -421,7 +421,7 @@ code = '''
// find clobbered blocks with lfsr_traversal_read // find clobbered blocks with lfsr_traversal_read
} else if (METHOD == 2) { } else if (METHOD == 2) {
lfsr_traversal_t t; 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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -510,7 +510,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
lfs_block_t badblock; lfs_block_t badblock;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
@@ -573,7 +573,8 @@ code = '''
// find clobbered blocks with lfsr_traversal_read // find clobbered blocks with lfsr_traversal_read
} else if (METHOD == 2) { } else if (METHOD == 2) {
lfsr_traversal_t t; 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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -764,7 +765,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
lfs_block_t badblock; lfs_block_t badblock;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
@@ -828,7 +829,8 @@ code = '''
// find clobbered blocks with lfsr_traversal_read // find clobbered blocks with lfsr_traversal_read
} else if (METHOD == 2) { } else if (METHOD == 2) {
lfsr_traversal_t t; 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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -1006,7 +1008,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1103,7 +1105,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1207,7 +1209,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
lfs_block_t badblock; lfs_block_t badblock;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
@@ -1355,7 +1357,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
lfs_block_t badblock; lfs_block_t badblock;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
@@ -1577,7 +1579,7 @@ code = '''
// find the data block // find the data block
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, 0) => 0; lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0;
lfs_block_t badblock; lfs_block_t badblock;
while (true) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -1688,7 +1690,7 @@ code = '''
// find the btree block // find the btree block
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, 0) => 0; lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0;
lfs_block_t badblock; lfs_block_t badblock;
while (true) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -2085,7 +2087,7 @@ code = '''
// find the data block // find the data block
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, 0) => 0; lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0;
lfs_block_t badblock; lfs_block_t badblock;
while (true) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -2196,7 +2198,7 @@ code = '''
// find the btree block // find the btree block
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, 0) => 0; lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0;
lfs_block_t badblock; lfs_block_t badblock;
while (true) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -2459,7 +2461,7 @@ code = '''
// find the btree block // find the btree block
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, 0) => 0; lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0;
lfs_block_t badblock; lfs_block_t badblock;
while (true) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -2601,7 +2603,7 @@ code = '''
// find the data block // find the data block
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, 0) => 0; lfsr_traversal_open(&lfs, &t, LFS_T_RDONLY) => 0;
lfs_block_t badblock; lfs_block_t badblock;
while (true) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -2830,7 +2832,7 @@ code = '''
// need an explicit traversal for this // need an explicit traversal for this
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -3148,7 +3150,7 @@ code = '''
// need an explicit traversal for this // need an explicit traversal for this
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -3564,7 +3566,7 @@ code = '''
// need an explicit traversal for this // need an explicit traversal for this
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -3847,7 +3849,7 @@ code = '''
// need an explicit traversal for this // need an explicit traversal for this
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);
@@ -4447,7 +4449,7 @@ code = '''
// need an explicit traversal for this // need an explicit traversal for this
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
LFS_ASSERT(i < 2*BLOCK_COUNT); LFS_ASSERT(i < 2*BLOCK_COUNT);

View File

@@ -710,7 +710,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -810,7 +810,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -912,7 +912,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -999,7 +999,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1118,7 +1118,7 @@ code = '''
// run lfsr_traversal_t // run lfsr_traversal_t
} else if (AFTER == 2) { } else if (AFTER == 2) {
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1152,7 +1152,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1281,7 +1281,7 @@ code = '''
// run lfsr_traversal_t // run lfsr_traversal_t
} else if (AFTER == 2) { } else if (AFTER == 2) {
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1315,7 +1315,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1471,7 +1471,7 @@ code = '''
} }
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1506,7 +1506,8 @@ code = '''
if (LOOKAHEAD) { if (LOOKAHEAD) {
// we need an explicit traversal for this // we need an explicit traversal for this
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1521,7 +1522,8 @@ code = '''
if (COMPACT) { if (COMPACT) {
// we need an explicit traversal for this // we need an explicit traversal for this
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1658,7 +1660,7 @@ code = '''
} }
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1693,7 +1695,8 @@ code = '''
if (LOOKAHEAD) { if (LOOKAHEAD) {
// we need an explicit traversal for this // we need an explicit traversal for this
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1708,7 +1711,8 @@ code = '''
if (COMPACT) { if (COMPACT) {
// we need an explicit traversal for this // we need an explicit traversal for this
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1785,7 +1789,7 @@ code = '''
} }
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1820,7 +1824,8 @@ code = '''
if (LOOKAHEAD) { if (LOOKAHEAD) {
// we need an explicit traversal for this // we need an explicit traversal for this
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);
@@ -1835,7 +1840,8 @@ code = '''
if (COMPACT) { if (COMPACT) {
// we need an explicit traversal for this // we need an explicit traversal for this
lfsr_traversal_t t; 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) { while (true) {
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
int err = lfsr_traversal_read(&lfs, &t, &tinfo); int err = lfsr_traversal_read(&lfs, &t, &tinfo);

View File

@@ -403,7 +403,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -492,7 +492,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);

View File

@@ -3490,7 +3490,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -3607,7 +3608,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -3750,7 +3752,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -3916,7 +3919,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -4060,7 +4064,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -4182,7 +4187,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -4346,7 +4352,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&t, lfsr_traversal_init(&t,
LFS_T_MTREEONLY LFS_T_RDONLY
| LFS_T_MTREEONLY
| ((CKMETA) ? LFS_T_CKMETA : 0)); | ((CKMETA) ? LFS_T_CKMETA : 0));
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -4474,7 +4481,7 @@ code = '''
// technically, cycle detection only needs to work when we're validating // technically, cycle detection only needs to work when we're validating
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_init(&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++) { for (lfs_block_t i = 0;; i++) {
// assert that we detect the cycle in a reasonable number of iterations // assert that we detect the cycle in a reasonable number of iterations
assert(i < 2*BLOCK_COUNT); assert(i < 2*BLOCK_COUNT);

View File

@@ -22,7 +22,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -55,7 +56,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -97,7 +99,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -148,7 +151,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -269,7 +273,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -383,7 +388,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
// a bit hacky, but this catches infinite loops // a bit hacky, but this catches infinite loops
@@ -499,7 +505,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
lfs_block_t r = 0; lfs_block_t r = 0;
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
@@ -629,7 +636,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
lfs_block_t r = 0; lfs_block_t r = 0;
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
@@ -752,7 +760,8 @@ code = '''
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &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; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
lfs_block_t r = 0; lfs_block_t r = 0;
for (lfs_block_t i = 0;; i++) { for (lfs_block_t i = 0;; i++) {
@@ -875,7 +884,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -909,7 +918,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -971,7 +980,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1005,7 +1014,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1066,7 +1075,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1103,7 +1112,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1149,7 +1158,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1181,7 +1190,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1243,7 +1252,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1275,7 +1284,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1336,7 +1345,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1371,7 +1380,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1417,7 +1426,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1449,7 +1458,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1511,7 +1520,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1543,7 +1552,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1604,7 +1613,7 @@ code = '''
// traverse to find blocks // traverse to find blocks
lfsr_traversal_t t; 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 k = 0;
for (lfs_block_t j = 0;; j++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1639,7 +1648,7 @@ code = '''
clobbered:; clobbered:;
// traverse again, we should detect the clobbered metadata // 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++) { for (lfs_block_t j = 0;; j++) {
assert(j < 2*BLOCK_COUNT); assert(j < 2*BLOCK_COUNT);
@@ -1689,7 +1698,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -1731,7 +1741,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -1793,7 +1804,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
struct lfs_tinfo tinfo; struct lfs_tinfo tinfo;
@@ -1866,7 +1878,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -1925,7 +1938,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -1984,7 +1998,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2058,7 +2073,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2139,7 +2155,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2231,7 +2248,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2319,7 +2337,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2420,7 +2439,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2515,7 +2535,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2605,7 +2626,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2708,7 +2730,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2806,7 +2829,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -2903,7 +2927,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3013,7 +3038,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3115,7 +3141,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3212,7 +3239,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3315,7 +3343,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3404,7 +3433,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3517,7 +3547,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3639,7 +3670,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3749,7 +3781,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3848,7 +3881,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -3955,7 +3989,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -4068,7 +4103,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -4209,7 +4245,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -4384,7 +4421,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -4566,7 +4604,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -4748,7 +4787,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -4921,7 +4961,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -5106,7 +5147,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -5285,7 +5327,8 @@ code = '''
// try traversing // try traversing
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) LFS_T_RDWR
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -5434,7 +5477,8 @@ code = '''
// try traversing and compacting // try traversing and compacting
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_COMPACT LFS_T_RDWR
| LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -5564,7 +5608,8 @@ code = '''
// try traversing and compacting // try traversing and compacting
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_COMPACT LFS_T_RDWR
| LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -5686,7 +5731,8 @@ code = '''
// try traversing and compacting // try traversing and compacting
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_COMPACT LFS_T_RDWR
| LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -5827,7 +5873,8 @@ code = '''
// try traversing and compacting // try traversing and compacting
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_COMPACT LFS_T_RDWR
| LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -6035,7 +6082,8 @@ code = '''
// try traversing and compacting // try traversing and compacting
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_COMPACT LFS_T_RDWR
| LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -6257,7 +6305,8 @@ code = '''
// try traversing and compacting // try traversing and compacting
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_COMPACT LFS_T_RDWR
| LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -6447,7 +6496,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -6570,7 +6620,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -6734,7 +6785,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -6894,7 +6946,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -7055,7 +7108,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -7224,7 +7278,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
| ((CKDATA) ? LFS_T_CKDATA : 0)) => 0; | ((CKDATA) ? LFS_T_CKDATA : 0)) => 0;
@@ -7411,7 +7466,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| LFS_T_COMPACT | LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -7584,7 +7640,8 @@ code = '''
// try traversing with mkconsistent // try traversing with mkconsistent
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
LFS_T_MKCONSISTENT LFS_T_RDWR
| LFS_T_MKCONSISTENT
| LFS_T_COMPACT | LFS_T_COMPACT
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -7711,7 +7768,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -7828,7 +7886,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -8012,7 +8071,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -8124,7 +8184,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -8399,7 +8460,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -8541,7 +8603,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)
@@ -8992,7 +9055,8 @@ code = '''
// open a traversal // open a traversal
lfsr_traversal_t t; lfsr_traversal_t t;
lfsr_traversal_open(&lfs, &t, lfsr_traversal_open(&lfs, &t,
((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0) LFS_T_RDWR
| ((MKCONSISTENT) ? LFS_T_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0) | ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)
| ((COMPACT) ? LFS_T_COMPACT : 0) | ((COMPACT) ? LFS_T_COMPACT : 0)
| ((CKMETA) ? LFS_T_CKMETA : 0) | ((CKMETA) ? LFS_T_CKMETA : 0)