Dropped LFSR_ATTR() prefix magic
Before:
LFSR_ATTR(RM(SUBMASK(REG)), 0, BUF("hi", 2))
Now:
LFSR_ATTR(
LFSR_TAG_RM | LFSR_TAG_SUBMASK | LFSR_TAG_REG, 0,
LFSR_DATA_BUF("hi", 2))
Yes, it's more verbose now.
But there were a couple reasons for dropping the idea:
- The implicit prefixing is a bit magical, and not really all that
common in C code. It would likely confuse new users on first read.
- The implicitly prefixing macros did not play will with macro expansion
rules.
In particular, because the nested not-yet-prefixed macros aren't
really macros, they aren't expanded as a part of argument prescan.
This led to surprising compile-time errors, and prevented recursive
attr-lists (which may be useful for shrubs).
- Implicit prefixes is not very C-like, and in particular it gets in the
way of sed/grep operations on source files.
- RM(SUBMASK(REG)) for combining tags is (IMO) ugly, compared to
LFSR_TAG_RM | LFSR_TAG_SUBMASK | LFSR_TAG_REG, even if the latter
requires more typing.
- Sometimes you need runtime-dependent TAG/DATA values, which implicit
prefixing gets in the way of. The LFSR_TAG_TAG(tag)/
LFSR_DATA_DATA(tag) backdoors worked around this, but they are even
more magical, and added noise to a not-actually-all-that-uncommon use
case.
And it's really not _that_ much extra effort to write out the prefixes
everywhere.
lfs.c:
lines bytes
before: 16894 537171
after: 16907 (+0.1%) 538340 (+0.2%)
tests/*.toml:
lines bytes
before: 53306 1811035
after: 54517 (+2.3%) 1851006 (+2.2%)
qadte came in quite handy again for refactoring the tests without
completely losing my sanity.
This commit is contained in:
+378
-215
File diff suppressed because it is too large
Load Diff
+129
-125
@@ -26,7 +26,9 @@ code = '''
|
||||
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(i), 0, BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
LFSR_ATTR(
|
||||
LFSR_TAG_UATTR(i), 0,
|
||||
LFSR_DATA_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
}
|
||||
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
@@ -70,7 +72,8 @@ code = '''
|
||||
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
UATTR(i), 0, BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
LFSR_TAG_UATTR(i), 0,
|
||||
LFSR_DATA_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
}
|
||||
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
@@ -111,7 +114,8 @@ code = '''
|
||||
for (lfs_size_t i = 0; i < N; i++) {
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
UATTR(1), 0, BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
LFSR_TAG_UATTR(1), 0,
|
||||
LFSR_DATA_BUF(&(uint8_t){'a'+(i % 26)}, 1)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
uint8_t buffer[4];
|
||||
@@ -158,13 +162,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -228,13 +232,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -302,13 +306,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -324,7 +328,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mdir to compact
|
||||
mdir.rbyd.eoff = -1;
|
||||
@@ -411,7 +415,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
uint8_t buffer[256];
|
||||
@@ -501,7 +505,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -584,13 +588,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -606,7 +610,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert mdir was dropped
|
||||
assert(lfsr_mtree_weight(&lfs.mtree) == 1*lfsr_mleafweight(&lfs));
|
||||
@@ -658,13 +662,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -682,7 +686,7 @@ code = '''
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert mdir was dropped
|
||||
assert(lfsr_mtree_weight(&lfs.mtree) == 1*lfsr_mleafweight(&lfs));
|
||||
@@ -734,13 +738,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// remove an entry, forcing the mdir to be dropped
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
@@ -750,7 +754,7 @@ code = '''
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert split/drop worked out
|
||||
assert(lfsr_mtree_weight(&lfs.mtree) == 1*lfsr_mleafweight(&lfs));
|
||||
@@ -802,13 +806,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -824,7 +828,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// remove an entry, forcing the mdir to be dropped
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
@@ -833,7 +837,7 @@ code = '''
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert split/drop worked out
|
||||
assert(lfsr_mtree_weight(&lfs.mtree) == 2*lfsr_mleafweight(&lfs));
|
||||
@@ -897,13 +901,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -919,7 +923,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// remove an entry, forcing the mdir to be dropped
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
@@ -928,7 +932,7 @@ code = '''
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert split/drop worked out
|
||||
assert(lfsr_mtree_weight(&lfs.mtree) == 2*lfsr_mleafweight(&lfs));
|
||||
@@ -1019,7 +1023,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -1048,7 +1052,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1123,13 +1127,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1145,10 +1149,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -1212,13 +1216,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1236,10 +1240,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -1307,13 +1311,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1331,10 +1335,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -1402,7 +1406,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -1458,7 +1462,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -1525,7 +1529,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -1587,13 +1591,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1614,10 +1618,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
// assert mroot relocated
|
||||
@@ -1687,13 +1691,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1709,7 +1713,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// setup mroot to compact and relocate on next commit
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1718,10 +1722,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
// assert mroot relocated
|
||||
@@ -1803,13 +1807,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -1830,11 +1834,11 @@ code = '''
|
||||
// force mdir to compact twice, this should relocate
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// force mdir to compact while we're removing
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
// assert mroot relocated
|
||||
assert(lfsr_mdir_cmp(&old_mroot, &lfs.mroot) != 0);
|
||||
|
||||
@@ -1891,13 +1895,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact, this should both uninline and relocate
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -1971,13 +1975,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact, this should both split and relocate
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -2077,7 +2081,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -2107,7 +2111,7 @@ code = '''
|
||||
// we can't really change metadata names, but commits still
|
||||
// trigger writes to the mdir
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -2136,7 +2140,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2206,14 +2210,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "c", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0c", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0c", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// insert a new entry, this should update our neighbors
|
||||
@@ -2221,7 +2225,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// assert our entry was created
|
||||
@@ -2262,14 +2266,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// try removing left neighbor
|
||||
@@ -2277,7 +2281,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&mdir, NULL, NULL) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert neighbor was removed
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
@@ -2309,14 +2313,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// try removing right neighbor
|
||||
@@ -2324,7 +2328,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&mdir, NULL, NULL) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert neighbor was removed
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
@@ -2358,14 +2362,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "d", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0d", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0d", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// create 2 large entries that needs to be uninlined and split
|
||||
@@ -2376,13 +2380,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -2427,14 +2431,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "e", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0e", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0e", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// create 2 large entries that needs to be uninlined and split
|
||||
@@ -2445,13 +2449,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'd', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -2462,7 +2466,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mdir to compact
|
||||
mdir.rbyd.eoff = -1;
|
||||
@@ -2507,14 +2511,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "b", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0b", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0b", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
@@ -2563,14 +2567,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "d", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0d", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0d", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// create 2 large entries that needs to be uninlined and split
|
||||
@@ -2581,13 +2585,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -2605,10 +2609,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -2648,14 +2652,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "d", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0d", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0d", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// create 2 large entries that needs to be uninlined and split
|
||||
@@ -2666,13 +2670,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'c', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -2690,10 +2694,10 @@ code = '''
|
||||
lfsr_mdir_t old_mdir = mdir;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
mdir.rbyd.eoff = -1;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
// assert we relocated
|
||||
assert(lfsr_mdir_cmp(&old_mdir, &mdir) != 0);
|
||||
|
||||
@@ -2731,14 +2735,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "f", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0f", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0f", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// create 2 large entries that needs to be uninlined and split
|
||||
@@ -2749,13 +2753,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'e', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -2766,7 +2770,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mdir to compact
|
||||
mdir.rbyd.eoff = -1;
|
||||
@@ -2782,7 +2786,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mdir to compact
|
||||
mdir.rbyd.eoff = -1;
|
||||
@@ -2827,14 +2831,14 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&left.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &left.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &left);
|
||||
|
||||
lfsr_opened_t right = {.type=0};
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "e", 1,
|
||||
&right.mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &right.mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0e", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0e", 2)))) => 0;
|
||||
lfsr_opened_add(&lfs, &right);
|
||||
|
||||
// create 2 large entries that needs to be uninlined and split
|
||||
@@ -2845,13 +2849,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'd', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -2862,7 +2866,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mdir to compact
|
||||
mdir.rbyd.eoff = -1;
|
||||
@@ -2875,7 +2879,7 @@ code = '''
|
||||
|
||||
// now remove the middle entry, forcing a drop
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(RM, -1, NULL()))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_RM, -1, LFSR_DATA_NULL()))) => 0;
|
||||
|
||||
// assert mdir was dropped correctly
|
||||
assert(lfsr_mtree_weight(&lfs.mtree) == 2*lfsr_mleafweight(&lfs));
|
||||
@@ -2919,7 +2923,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
|
||||
// test that we can traverse the tree, keeping track of all blocks we see
|
||||
uint8_t *seen = malloc((BLOCK_COUNT+7)/8);
|
||||
@@ -3018,13 +3022,13 @@ code = '''
|
||||
uint8_t buffer[SIZE];
|
||||
memset(buffer, 'a', SIZE);
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer, 'b', SIZE);
|
||||
lfsr_mdir_t mdir;
|
||||
lfsr_mtree_lookup(&lfs, &lfs.mtree, 0, &mdir) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(UATTR(1), 0, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_UATTR(1), 0, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -3152,13 +3156,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -3290,13 +3294,13 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
memset(buffer+1, 'b', SIZE-1);
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact
|
||||
lfs.mroot.rbyd.eoff = -1;
|
||||
@@ -3312,7 +3316,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mdir to compact
|
||||
mdir.rbyd.eoff = -1;
|
||||
@@ -3452,7 +3456,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, "a", 1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF("\0a", 2)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF("\0a", 2)))) => 0;
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -3570,7 +3574,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
uint8_t buffer[256];
|
||||
@@ -3718,7 +3722,7 @@ code = '''
|
||||
mdir.rbyd.eoff = -1;
|
||||
}
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(name, 4)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(name, 4)))) => 0;
|
||||
lfsr_data_t data;
|
||||
|
||||
// double check
|
||||
@@ -3851,8 +3855,8 @@ code = '''
|
||||
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_ATTRS(
|
||||
LFSR_ATTR(
|
||||
MROOT, 0,
|
||||
FROMMPTR(&LFSR_MPTR_MROOTANCHOR())))) => 0;
|
||||
LFSR_TAG_MROOT, 0,
|
||||
LFSR_DATA_FROMMPTR(&LFSR_MPTR_MROOTANCHOR())))) => 0;
|
||||
|
||||
// technically, cycle detection only needs to work when we're validating
|
||||
lfsr_traversal_t traversal = LFSR_TRAVERSAL(LFSR_TRAVERSAL_VALIDATE);
|
||||
@@ -3930,7 +3934,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
@@ -3986,7 +3990,7 @@ code = '''
|
||||
lfsr_mtree_namelookup(&lfs, &lfs.mtree, 0, (const char*)buffer+1, SIZE-1,
|
||||
&mdir, NULL, NULL) => LFS_ERR_NOENT;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_ATTRS(
|
||||
LFSR_ATTR(REG, +1, BUF(buffer, SIZE)))) => 0;
|
||||
LFSR_ATTR(LFSR_TAG_REG, +1, LFSR_DATA_BUF(buffer, SIZE)))) => 0;
|
||||
|
||||
// force mroot to compact twice, this should extend the mroot
|
||||
lfsr_mdir_t old_mroot = lfs.mroot;
|
||||
|
||||
+1713
-669
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user