Folded rbyd.erased into rbyd.off=block_size, some rbyd cleanup

- The erased flag in lfsr_rbyd_t uses only a single bit, which is
  wasteful for a heavily used struct in littlefs. We can use
  rbyd.off=block_size to indicate the same state for free. Note that
  when rbyd.off=block_size, we must treat rbyd as unerased anyways.

- Improved state handling in rbyd_append/commit when an error occurs.
  I will be trying to make better use of cleanup gotos to make these
  functions less unpredictable when an error occurs. Hopefully the state
  of littlefs after an error can be well-defined in the future.

- Fixed sign-mismatch warnings in asserts when compiled outside of the
  test runner.
This commit is contained in:
Christopher Haster
2023-04-07 14:59:22 -05:00
parent 7eb0c4763a
commit ed8d8c0c24
3 changed files with 73 additions and 157 deletions
+70 -68
View File
@@ -1168,7 +1168,7 @@ static int lfs_alloc(lfs_t *lfs, lfs_block_t *block) {
// allocate an rbyd block
static int lfsr_rbyd_alloc(lfs_t *lfs, lfsr_rbyd_t *rbyd, uint32_t rev) {
*rbyd = (lfsr_rbyd_t){.erased=true, .rev=rev};
*rbyd = (lfsr_rbyd_t){.rev=rev, .off=0};
int err = lfs_alloc(lfs, &rbyd->block);
if (err) {
return err;
@@ -1501,7 +1501,7 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
// did we end on a valid commit? we may have an erased block
rbyd->erased = false;
bool erased = false;
if (maybeerased && rbyd->off % lfs->cfg->prog_size == 0) {
// check for an fcrc matching the next prog's erased state, if
// this failed most likely a previous prog was interrupted, we
@@ -1517,7 +1517,11 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
// found beginning of erased part?
rbyd->erased = (fcrc_ == fcrc.crc);
erased = (fcrc_ == fcrc.crc);
}
if (!erased) {
rbyd->off = lfs->cfg->block_size;
}
return 0;
@@ -1927,25 +1931,26 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
// never write zero tags to disk, use unr if tag contains no data
LFS_ASSERT(tag != 0);
// we can't do anything if we're not erased
int err;
if (rbyd->off >= lfs->cfg->block_size) {
err = LFS_ERR_RANGE;
goto failed;
}
// ignore noops
if (lfsr_tag_setnomk(tag) == LFSR_TAG_UNR && delta == 0) {
return 0;
}
// we can't do anything if we're not erased
if (!rbyd->erased) {
return LFS_ERR_RANGE;
}
// make sure every rbyd starts with its revision count
if (rbyd->off == 0) {
uint32_t rev;
lfs_tole32_(rbyd->rev, &rev);
int err = lfsr_rbyd_prog(lfs, rbyd,
err = lfsr_rbyd_prog(lfs, rbyd,
&rev, sizeof(uint32_t), &rbyd->crc);
if (err) {
rbyd->erased = false;
return err;
goto failed;
}
}
@@ -1958,7 +1963,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
lfsr_tag_t tag_;
lfsr_tag_t other_tag_;
if (lfsr_tag_ismk(tag) && delta > 0) {
LFS_ASSERT(id <= rbyd->weight);
LFS_ASSERT(id <= (lfs_ssize_t)rbyd->weight);
// it's a bit ugly, but adjusting the id here makes the following
// logic work out more consistently
@@ -1969,7 +1974,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
tag_ = 0x10;
other_tag_ = lfsr_tag_setupper(0x10);
} else if (lfsr_tag_ismk(tag) && delta < 0) {
LFS_ASSERT(id < rbyd->weight);
LFS_ASSERT(id < (lfs_ssize_t)rbyd->weight);
// it's a bit ugly, but adjusting the id here makes the following
// logic work out more consistently
@@ -1980,14 +1985,14 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
tag_ = 0x10;
other_tag_ = lfsr_tag_setupper(0x10);
} else if (lfsr_tag_isrm(tag)) {
LFS_ASSERT(id < rbyd->weight);
LFS_ASSERT(id < (lfs_ssize_t)rbyd->weight);
id_ = id - lfs_smax32(-delta, 0);
other_id_ = id;
tag_ = lfsr_tag_key(tag);
other_tag_ = lfsr_tag_setupper(lfsr_tag_key(tag) + 0x10);
} else {
LFS_ASSERT(id < rbyd->weight);
LFS_ASSERT(id < (lfs_ssize_t)rbyd->weight);
id_ = id - lfs_smax32(-delta, 0);
other_id_ = id;
@@ -2048,8 +2053,8 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
&lfs->pcache, &lfs->rcache, 0,
rbyd->block, branch, &alt, &weight, &jump, NULL);
if (d < 0) {
rbyd->erased = false;
return d;
err = d;
goto failed;
}
// found an alt?
@@ -2239,13 +2244,11 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
// push alt onto our queue
LFS_ASSERT(weight >= 0);
int err = lfsr_rbyd_p_push(lfs, rbyd,
err = lfsr_rbyd_p_push(lfs, rbyd,
p_alts, p_weights, p_jumps,
alt, weight, jump);
if (err) {
rbyd->erased = false;
return err;
goto failed;
}
// found end of tree?
@@ -2340,12 +2343,11 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
if (alt) {
int err = lfsr_rbyd_p_push(lfs, rbyd,
err = lfsr_rbyd_p_push(lfs, rbyd,
p_alts, p_weights, p_jumps,
alt, weight, branch);
if (err) {
rbyd->erased = false;
return err;
goto failed;
}
if (lfsr_tag_isred(p_alts[0])) {
@@ -2355,11 +2357,10 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
// flush any pending alts
int err = lfsr_rbyd_p_flush(lfs, rbyd,
err = lfsr_rbyd_p_flush(lfs, rbyd,
p_alts, p_weights, p_jumps, 3);
if (err) {
rbyd->erased = false;
return err;
goto failed;
}
leaf:;
@@ -2371,49 +2372,53 @@ leaf:;
lfsr_tag_setnomk(tag), upper_id - lower_id - 1 + delta,
lfsr_data_len(data), &rbyd->crc);
if (err) {
rbyd->erased = false;
return err;
goto failed;
}
// don't forget the data!
err = lfsr_rbyd_progdata(lfs, rbyd, data, &rbyd->crc);
if (err) {
rbyd->erased = false;
return err;
goto failed;
}
return 0;
failed:;
// if we fail mark the rbyd as unerased and release the pcache
lfs_cache_zero(lfs, &lfs->pcache);
rbyd->off = lfs->cfg->block_size;
return err;
}
static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
const lfsr_attr_t *attrs, lfs_size_t attr_count) {
// we can't do anything if we're not erased
if (!rbyd->erased) {
return LFS_ERR_RANGE;
int err;
if (rbyd->off >= lfs->cfg->block_size) {
err = LFS_ERR_RANGE;
goto failed;
}
// setup commit state
lfsr_rbyd_t rbyd_ = *rbyd;
// mark erased in case we fail
rbyd->erased = false;
// make sure every rbyd starts with its revision count
if (rbyd_.off == 0) {
uint32_t rev;
lfs_tole32_(rbyd_.rev, &rev);
int err = lfsr_rbyd_prog(lfs, &rbyd_,
err = lfsr_rbyd_prog(lfs, &rbyd_,
&rev, sizeof(uint32_t), &rbyd_.crc);
if (err) {
return err;
goto failed;
}
}
// append each tag to the tree
for (lfs_size_t i = 0; i < attr_count; i++) {
int err = lfsr_rbyd_append(lfs, &rbyd_,
err = lfsr_rbyd_append(lfs, &rbyd_,
attrs[i].id, attrs[i].tag, attrs[i].delta, attrs[i].data);
if (err) {
return err;
goto failed;
}
}
@@ -2446,14 +2451,14 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
// space for fcrc?
uint8_t perturb = 0;
if (aligned <= lfs->cfg->block_size - lfs->cfg->prog_size) {
if (aligned < lfs->cfg->block_size) {
// read the leading byte in case we need to change the expected
// value of the next tag's valid bit
int err = lfs_bd_read(lfs,
&lfs->pcache, &lfs->rcache, lfs->cfg->prog_size,
rbyd_.block, aligned, &perturb, 1);
if (err && err != LFS_ERR_CORRUPT) {
rbyd_.erased = false;
rbyd->off = lfs->cfg->block_size;
return err;
}
@@ -2464,8 +2469,7 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
&lfs->pcache, &lfs->rcache, lfs->cfg->prog_size,
rbyd_.block, aligned, fcrc.size, &fcrc.crc);
if (err && err != LFS_ERR_CORRUPT) {
rbyd_.erased = false;
return err;
goto failed;
}
uint8_t fbuf[LFSR_FCRC_DSIZE];
@@ -2473,29 +2477,24 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
err = lfsr_rbyd_progtag(lfs, &rbyd_,
LFSR_TAG_FCRC, 0, fcrc_delta, &rbyd_.crc);
if (err) {
rbyd_.erased = false;
return err;
goto failed;
}
err = lfsr_rbyd_prog(lfs, &rbyd_,
fbuf, fcrc_delta, &rbyd_.crc);
if (err) {
rbyd_.erased = false;
return err;
goto failed;
}
} else {
// recalculate aligned without fcrc
aligned = lfs_alignup(
rbyd_.off + 1+1+5+4,
lfs->cfg->prog_size);
rbyd_.erased = false;
}
// not even space for the crc?
if (aligned > lfs->cfg->block_size) {
lfs_cache_zero(lfs, &lfs->pcache);
rbyd_.erased = false;
return LFS_ERR_RANGE;
// at least space for a crc?
} else if (rbyd_.off + 2+1+5+4 <= lfs->cfg->block_size) {
// note this implicitly marks the rbyd as unerased
aligned = lfs->cfg->block_size;
// not even space for a crc? we can't finish the commit
} else {
err = LFS_ERR_RANGE;
goto failed;
}
// build end-of-commit crc
@@ -2525,17 +2524,15 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
lfs_tole32_(rbyd_.crc, &buffer[2+1+5]);
int err = lfsr_rbyd_prog(lfs, &rbyd_, buffer, 2+1+5+4, NULL);
err = lfsr_rbyd_prog(lfs, &rbyd_, buffer, 2+1+5+4, NULL);
if (err) {
rbyd_.erased = false;
return err;
goto failed;
}
// flush our caches, finalizing the commit on-disk
err = lfs_bd_sync(lfs, &lfs->pcache, &lfs->rcache, false);
if (err) {
rbyd_.erased = false;
return err;
goto failed;
}
// succesful commit, check checksum to make sure
@@ -2544,8 +2541,7 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
NULL, &lfs->rcache, rbyd_.off-4,
rbyd_.block, rbyd->off, rbyd_.off-4 - rbyd->off, &crc_);
if (err) {
rbyd_.erased = false;
return err;
goto failed;
}
if (rbyd_.crc != crc_) {
@@ -2553,14 +2549,20 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
LFS_ERROR("Rbyd corrupted during commit "
"(block=0x%"PRIx32", 0x%08"PRIx32" != 0x%08"PRIx32")",
rbyd_.block, rbyd_.crc, crc_);
rbyd_.erased = false;
return LFS_ERR_CORRUPT;
err = LFS_ERR_CORRUPT;
goto failed;
}
// ok, everything is good, save what we've committed
rbyd_.off = aligned;
*rbyd = rbyd_;
return 0;
failed:;
// if we fail mark the rbyd as unerased and release the pcache
lfs_cache_zero(lfs, &lfs->pcache);
rbyd->off = lfs->cfg->block_size;
return err;
}
+3 -4
View File
@@ -332,13 +332,12 @@ typedef struct lfs_cache {
typedef struct lfsr_rbyd {
lfs_block_t block;
uint32_t rev;
// off=block_size => rbyd not erased/needs compaction
lfs_off_t off;
uint32_t crc;
lfs_off_t trunk;
lfs_size_t weight;
// TODO can we get rid of erased? use sign bit of off maybe?
bool erased;
uint32_t rev;
uint32_t crc;
} lfsr_rbyd_t;
//typedef struct lfsr_btree {
-85
View File
@@ -26,7 +26,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
@@ -65,7 +64,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
@@ -105,7 +103,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
@@ -140,7 +137,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -265,7 +261,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -392,7 +387,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -485,7 +479,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -580,7 +573,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -646,7 +638,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -714,7 +705,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -796,7 +786,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -942,7 +931,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -1116,7 +1104,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -1290,7 +1277,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -1472,7 +1458,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -1682,7 +1667,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -1851,7 +1835,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2041,7 +2024,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2135,7 +2117,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2219,7 +2200,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2311,7 +2291,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2409,7 +2388,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2484,7 +2462,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2558,7 +2535,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2671,7 +2647,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2736,7 +2711,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -2851,7 +2825,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -3006,7 +2979,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -3104,7 +3076,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -3256,7 +3227,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -3494,7 +3464,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -3585,7 +3554,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -3714,7 +3682,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const char *alpha = "abcdefghijklmnopqrstuvwxyz";
@@ -3851,7 +3818,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -4000,7 +3966,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -4163,7 +4128,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -4267,7 +4231,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -4362,7 +4325,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -4471,7 +4433,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -4586,7 +4547,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -4681,7 +4641,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -4771,7 +4730,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -4842,7 +4800,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -5078,7 +5035,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -5341,7 +5297,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -5457,7 +5412,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -5563,7 +5517,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -5732,7 +5685,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -5912,7 +5864,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -6025,7 +5976,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -6137,7 +6087,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
const uint8_t names[6][4] = {
"\xaa\xaa\xaa\xaa",
@@ -6267,7 +6216,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
const uint8_t names[6][4] = {
"\xaa\xaa\xaa\xaa",
@@ -6466,7 +6414,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
const uint8_t names[6][4] = {
"\xaa\xaa\xaa\xaa",
@@ -6592,7 +6539,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -6686,7 +6632,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -6828,7 +6773,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -6987,7 +6931,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -7115,7 +7058,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -7363,7 +7305,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -7521,7 +7462,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -7715,7 +7655,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -7843,7 +7782,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -7985,7 +7923,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -8101,7 +8038,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
uint8_t buffer[4];
@@ -8236,7 +8172,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -8380,7 +8315,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -8542,7 +8476,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const char *alpha = "abcdefghijklmnopqrstuvwxyz";
@@ -8678,7 +8611,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -8918,7 +8850,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -9030,7 +8961,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -9119,7 +9049,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -9207,7 +9136,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -9882,7 +9810,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;
@@ -10141,7 +10068,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -10255,7 +10181,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -10379,7 +10304,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -10509,7 +10433,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -10647,7 +10570,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -10794,7 +10716,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -10924,7 +10845,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -11062,7 +10982,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -11208,7 +11127,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][6] = {
@@ -11366,7 +11284,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const uint8_t names[6][4] = {
@@ -11549,7 +11466,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
const char *alpha = "abcdefghijklmnopqrstuvwxyz";
@@ -11733,7 +11649,6 @@ code = '''
.crc = 0,
.trunk = 0,
.weight = 0,
.erased = true,
};
lfsr_rbyd_t rbyd;
lfsr_tag_t tag_;