rattrs: Converted rattrs to full variable-length isa
It's funny to see what originally started as a simple list of rbyd attrs
slowly morph into a full isa. But it makes sense. What we really want is
an abstract description of operations that can be played and replayed as
necessary to atomically update the mtree.
Using a fixed lfs3_rattr_t struct to represent this in C is easy, and
avoids strict-aliasing issues, but ultimately limited when it comes to
the wide-range of data we want to attach to attributes.
Unlike a computer's isa, we want to be able to include full 12-24 byte
branch pointers directly in the instruction!
---
So here's a full variable-length isa organized by words (max(uintptr_t,
uint32_t)).
The first 32-bit word extends the 16-bit tag with an extra 16-bits of
control information:
wwll llff ffcc cccc tttt tttt tttt tttt
^'-.-''-.-''--.--' : :
'--|----|-----|----:-----------------:-- compressed weight
:: '----|-----|----:-----------------:-- total len
:: '-----|----:-----------------:-- from encoder
:: '----:-----------------:-- optional count
:: rgmm kkkk -kkk kkkk
11 => w=-1 ^^ ^ '-.' '---.---'
00 => w=0 '|-|---|------|------ rm bit
01 => w=+1 '-|---|------|------ grow bit
10 => w=attached '---|------|------ mask bits
'------|------ tag suptype
'------ tag subtype
The 4-bit length field always encodes the full length of the
instruction, including the instruction itself and optional weight. The
4-bit from + 6-bit count fields operate independently and tell
lfs3_rbyd_appendrattr_ how to actually encode the data related to the
instruction.
To work around strict-aliasing issues, complex structs are expected to
be broken down into words and reconstructed in lfs3_rbyd_appendrattr_.
Most of our structs are organized into words anyways. For example:
// new child
*r++ = LFS3_RATTR(5, LFS3_TAG_BRANCH, -2, LFS3_FROM_BRANCH);
*r++ = LFS3_RATTR_WEIGHT(+child_->weight);
*r++ = LFS3_RATTR_ARG(child_->blocks[0]);
*r++ = LFS3_RATTR_ARG(child_->trunk);
*r++ = LFS3_RATTR_ARG(child_->cksum);
This also changes rattr-lists to be null-terminated, which makes a bit
more sense in a variable-length isa:
*r++ = LFS3_RATTR_NULL; // all zeros, including length
One concern with null-terminated rattr-lists is how easy it is to
forget the null-terminator, but an assert that all non-null rattrs have
non-zero length seemed to catch the many many mistakes during adoption.
Alternatively, separate LFS3_FROM_NULL/LFS3_FROM_NIL from fields could
be used if encoding space gets tight.
I'm also quite happy with the 2-bit weight feild, which allows omitting
the optional weight word for -1,0,+1 weights. These should cover at
least all mdir operations.
Note the exact encoding of the rattr fields is less of a concern than
the tag fields, as it doesn't reside on-disk can be changed on whim.
---
Saves a nice chunk of code and stack:
code stack ctx
before: 35920 2280 660
after: 35324 (-1.7%) 2176 (-4.6%) 660 (+0.0%)
code stack ctx
gbmap before: 38812 2296 772
gbmap after: 38156 (-1.7%) 2192 (-4.5%) 772 (+0.0%)
The stack savings are obvious, but the code savings a bit less so. A
variable length isa _is_ more complicated, but by limiting most encoding
decisions to compile-time (2-bit weights vs 32-bit weights for example),
the savings from fewer word manipulations on the stack wins.
This commit is contained in:
@@ -38,7 +38,7 @@ typedef uint32_t lfs3_off_t;
|
|||||||
typedef int32_t lfs3_soff_t;
|
typedef int32_t lfs3_soff_t;
|
||||||
|
|
||||||
typedef uint32_t lfs3_block_t;
|
typedef uint32_t lfs3_block_t;
|
||||||
typedef int32_t lfs3_sblock_t;
|
typedef int32_t lfs3_sblock_t;
|
||||||
|
|
||||||
typedef uint32_t lfs3_rid_t;
|
typedef uint32_t lfs3_rid_t;
|
||||||
typedef int32_t lfs3_srid_t;
|
typedef int32_t lfs3_srid_t;
|
||||||
@@ -1142,8 +1142,6 @@ typedef struct lfs3_file {
|
|||||||
lfs3_off_t pos;
|
lfs3_off_t pos;
|
||||||
|
|
||||||
// in-RAM cache
|
// in-RAM cache
|
||||||
//
|
|
||||||
// note this lines up with lfs3_data_t's buffer representation
|
|
||||||
struct {
|
struct {
|
||||||
lfs3_off_t pos;
|
lfs3_off_t pos;
|
||||||
lfs3_off_t size;
|
lfs3_off_t size;
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ code = '''
|
|||||||
|
|
||||||
// add to btree
|
// add to btree
|
||||||
lfs3_btree_commit(&lfs3, &btree, bid, LFS3_RATTRS(
|
lfs3_btree_commit(&lfs3, &btree, bid, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(2, LFS3_TAG_DATA, +1, LFS3_FROM_BUF, 1),
|
||||||
LFS3_TAG_DATA, +1,
|
LFS3_RATTR_ARG(&(uint8_t){'a'+(i % 26)}),
|
||||||
&(uint8_t){'a'+(i % 26)}, 1))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// add to sim
|
// add to sim
|
||||||
memmove(&sim[bid+1], &sim[bid], sim_size-bid);
|
memmove(&sim[bid+1], &sim[bid], sim_size-bid);
|
||||||
@@ -2041,9 +2041,9 @@ code = '''
|
|||||||
|
|
||||||
// add to btree
|
// add to btree
|
||||||
lfs3_btree_commit(&lfs3, &btree, bid, LFS3_RATTRS(
|
lfs3_btree_commit(&lfs3, &btree, bid, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(2, LFS3_TAG_DATA, +1, LFS3_FROM_BUF, 1),
|
||||||
LFS3_TAG_DATA, +1,
|
LFS3_RATTR_ARG(&(uint8_t){'a'+(i % 26)}),
|
||||||
&(uint8_t){'a'+(i % 26)}, 1))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// add to sim
|
// add to sim
|
||||||
memmove(&sim[bid+1], &sim[bid], sim_size-bid);
|
memmove(&sim[bid+1], &sim[bid], sim_size-bid);
|
||||||
@@ -4006,9 +4006,9 @@ code = '''
|
|||||||
|
|
||||||
// add to btree
|
// add to btree
|
||||||
lfs3_btree_commit(&lfs3, &btree, bid, LFS3_RATTRS(
|
lfs3_btree_commit(&lfs3, &btree, bid, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(2, LFS3_TAG_DATA, +1, LFS3_FROM_BUF, 1),
|
||||||
LFS3_TAG_DATA, +1,
|
LFS3_RATTR_ARG(&(uint8_t){'a'+(i % 26)}),
|
||||||
&(uint8_t){'a'+(i % 26)}, 1))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// add to sim
|
// add to sim
|
||||||
memmove(&sim[bid+1], &sim[bid], sim_size-bid);
|
memmove(&sim[bid+1], &sim[bid], sim_size-bid);
|
||||||
|
|||||||
+546
-356
File diff suppressed because it is too large
Load Diff
+29
-24
@@ -978,8 +978,8 @@ code = '''
|
|||||||
|
|
||||||
// delete any bshrub/btree
|
// delete any bshrub/btree
|
||||||
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR(
|
LFS3_RATTR(1, LFS3_tag_RM | LFS3_tag_MASK8 | LFS3_TAG_STRUCT, 0),
|
||||||
LFS3_tag_RM | LFS3_tag_MASK8 | LFS3_TAG_STRUCT, 0))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
@@ -1094,25 +1094,27 @@ code = '''
|
|||||||
|
|
||||||
// create an empty bshrub
|
// create an empty bshrub
|
||||||
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_SHRUBCOMMIT(
|
LFS3_RATTR(4, LFS3_tag_SHRUBCOMMIT, 0),
|
||||||
(&(lfs3_shrubcommit_t){
|
LFS3_RATTR_ARG(&file.b),
|
||||||
.bshrub=&file.b,
|
LFS3_RATTR_ARG(0),
|
||||||
.rid=0,
|
LFS3_RATTR_ARG(LFS3_RATTRS(
|
||||||
.rattrs=((lfs3_rattr_t[]){
|
LFS3_RATTR(2, LFS3_TAG_DATA, +1, LFS3_FROM_BUF, 1),
|
||||||
LFS3_RATTR_BUF(LFS3_TAG_DATA, +1, "?", 1)}),
|
LFS3_RATTR_ARG("?"),
|
||||||
.rattr_count=1})))) => 0;
|
LFS3_RATTR_NULL)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_SHRUBCOMMIT(
|
LFS3_RATTR(4, LFS3_tag_SHRUBCOMMIT, 0),
|
||||||
(&(lfs3_shrubcommit_t){
|
LFS3_RATTR_ARG(&file.b),
|
||||||
.bshrub=&file.b,
|
LFS3_RATTR_ARG(0),
|
||||||
.rid=0,
|
LFS3_RATTR_ARG(LFS3_RATTRS(
|
||||||
.rattrs=((lfs3_rattr_t[]){
|
LFS3_RATTR(1, LFS3_tag_RM, -1),
|
||||||
LFS3_RATTR(LFS3_tag_RM, -1)}),
|
LFS3_RATTR_NULL)),
|
||||||
.rattr_count=1})))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_SHRUB(
|
LFS3_RATTR(2, LFS3_tag_MASK8 | LFS3_TAG_BSHRUB, 0,
|
||||||
LFS3_tag_MASK8 | LFS3_TAG_BSHRUB, 0,
|
LFS3_FROM_SHRUB),
|
||||||
&file.b.b_))) => 0;
|
LFS3_RATTR_ARG(&file.b.b_),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
@@ -1229,13 +1231,16 @@ code = '''
|
|||||||
lfs3_alloc_ckpoint(&lfs3);
|
lfs3_alloc_ckpoint(&lfs3);
|
||||||
lfs3_rbyd_alloc(&lfs3, &file.b.b.r) => 0;
|
lfs3_rbyd_alloc(&lfs3, &file.b.b.r) => 0;
|
||||||
lfs3_rbyd_commit(&lfs3, &file.b.b.r, 0, LFS3_RATTRS(
|
lfs3_rbyd_commit(&lfs3, &file.b.b.r, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(LFS3_TAG_DATA, +1, "?", 1))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_DATA, +1, LFS3_FROM_BUF, 1),
|
||||||
|
LFS3_RATTR_ARG("?"),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_rbyd_commit(&lfs3, &file.b.b.r, 0, LFS3_RATTRS(
|
lfs3_rbyd_commit(&lfs3, &file.b.b.r, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_tag_RM, -1))) => 0;
|
LFS3_RATTR(1, LFS3_tag_RM, -1),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &file.b.h.mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BTREE(
|
LFS3_RATTR(2, LFS3_tag_MASK8 | LFS3_TAG_BTREE, 0,
|
||||||
LFS3_tag_MASK8 | LFS3_TAG_BTREE, 0,
|
LFS3_FROM_BTREE),
|
||||||
&file.b.b))) => 0;
|
LFS3_RATTR_ARG(&file.b.b))) => 0;
|
||||||
|
|
||||||
lfs3_file_close(&lfs3, &file) => 0;
|
lfs3_file_close(&lfs3, &file) => 0;
|
||||||
|
|
||||||
|
|||||||
@@ -5000,9 +5000,10 @@ code = '''
|
|||||||
|
|
||||||
printf("pos = %d, %d\n", pos, weight);
|
printf("pos = %d, %d\n", pos, weight);
|
||||||
lfs3_bshrub_commit(&lfs3, &file.b, pos, LFS3_RATTRS(
|
lfs3_bshrub_commit(&lfs3, &file.b, pos, LFS3_RATTRS(
|
||||||
LFS3_RATTR_DATA(
|
LFS3_RATTR(3, LFS3_tag_GROW | tag, -2, LFS3_FROM_CAT, 1),
|
||||||
LFS3_tag_GROW | tag, -(weight/2),
|
LFS3_RATTR_WEIGHT(-(weight/2)),
|
||||||
&data))) => 0;
|
LFS3_RATTR_ARG(&data),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
pos = pos - (weight/2) + 1;
|
pos = pos - (weight/2) + 1;
|
||||||
}
|
}
|
||||||
@@ -5110,9 +5111,10 @@ code = '''
|
|||||||
|
|
||||||
printf("pos = %d, %d\n", pos, weight);
|
printf("pos = %d, %d\n", pos, weight);
|
||||||
lfs3_bshrub_commit(&lfs3, &file.b, pos, LFS3_RATTRS(
|
lfs3_bshrub_commit(&lfs3, &file.b, pos, LFS3_RATTRS(
|
||||||
LFS3_RATTR_DATA(
|
LFS3_RATTR(3, LFS3_tag_GROW | tag, -2, LFS3_FROM_CAT, 1),
|
||||||
LFS3_tag_GROW | tag, -(weight/2),
|
LFS3_RATTR_WEIGHT(-(weight/2)),
|
||||||
&data))) => 0;
|
LFS3_RATTR_ARG(&data),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
pos = pos - (weight/2) + 1;
|
pos = pos - (weight/2) + 1;
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-6
@@ -24,7 +24,9 @@ code = '''
|
|||||||
lfs3_btree_t gbmap;
|
lfs3_btree_t gbmap;
|
||||||
lfs3_btree_init(&gbmap);
|
lfs3_btree_init(&gbmap);
|
||||||
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_TAG_BMFREE, +BLOCK_COUNT))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_BMFREE, -2),
|
||||||
|
LFS3_RATTR_WEIGHT(+BLOCK_COUNT),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// set some blocks as in-use, avoid any weird merges for now
|
// set some blocks as in-use, avoid any weird merges for now
|
||||||
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
||||||
@@ -85,7 +87,9 @@ code = '''
|
|||||||
lfs3_btree_t gbmap;
|
lfs3_btree_t gbmap;
|
||||||
lfs3_btree_init(&gbmap);
|
lfs3_btree_init(&gbmap);
|
||||||
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_TAG_BMFREE, +BLOCK_COUNT))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_BMFREE, -2),
|
||||||
|
LFS3_RATTR_WEIGHT(+BLOCK_COUNT),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// set some blocks as in-use, avoid any weird merges for now
|
// set some blocks as in-use, avoid any weird merges for now
|
||||||
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
||||||
@@ -150,7 +154,9 @@ code = '''
|
|||||||
lfs3_btree_t gbmap;
|
lfs3_btree_t gbmap;
|
||||||
lfs3_btree_init(&gbmap);
|
lfs3_btree_init(&gbmap);
|
||||||
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_TAG_BMFREE, +BLOCK_COUNT))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_BMFREE, -2),
|
||||||
|
LFS3_RATTR_WEIGHT(+BLOCK_COUNT),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// set some blocks as in-use, avoid any weird merges for now
|
// set some blocks as in-use, avoid any weird merges for now
|
||||||
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
||||||
@@ -216,7 +222,9 @@ code = '''
|
|||||||
lfs3_btree_t gbmap;
|
lfs3_btree_t gbmap;
|
||||||
lfs3_btree_init(&gbmap);
|
lfs3_btree_init(&gbmap);
|
||||||
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_TAG_BMFREE, +BLOCK_COUNT))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_BMFREE, -2),
|
||||||
|
LFS3_RATTR_WEIGHT(+BLOCK_COUNT),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// set some blocks as in-use, avoid any weird merges for now
|
// set some blocks as in-use, avoid any weird merges for now
|
||||||
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
lfs3_gbmap_mark(&lfs3, &gbmap, 6, LFS3_TAG_BMINUSE) => 0;
|
||||||
@@ -283,7 +291,9 @@ code = '''
|
|||||||
lfs3_btree_t gbmap;
|
lfs3_btree_t gbmap;
|
||||||
lfs3_btree_init(&gbmap);
|
lfs3_btree_init(&gbmap);
|
||||||
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_TAG_BMFREE, +BLOCK_COUNT))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_BMFREE, -2),
|
||||||
|
LFS3_RATTR_WEIGHT(+BLOCK_COUNT),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// test that setting the first and last blocks don't break anything
|
// test that setting the first and last blocks don't break anything
|
||||||
//
|
//
|
||||||
@@ -333,7 +343,9 @@ code = '''
|
|||||||
lfs3_btree_t gbmap;
|
lfs3_btree_t gbmap;
|
||||||
lfs3_btree_init(&gbmap);
|
lfs3_btree_init(&gbmap);
|
||||||
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
lfs3_gbmap_commit(&lfs3, &gbmap, 0, LFS3_RATTRS(
|
||||||
LFS3_RATTR(LFS3_TAG_BMFREE, +BLOCK_COUNT))) => 0;
|
LFS3_RATTR(2, LFS3_TAG_BMFREE, -2),
|
||||||
|
LFS3_RATTR_WEIGHT(+BLOCK_COUNT),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// create a simulation to compare against
|
// create a simulation to compare against
|
||||||
lfs3_tag_t *sim = malloc(BLOCK_COUNT*sizeof(lfs3_tag_t));
|
lfs3_tag_t *sim = malloc(BLOCK_COUNT*sizeof(lfs3_tag_t));
|
||||||
|
|||||||
+165
-136
@@ -704,8 +704,8 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR(
|
LFS3_RATTR(1, LFS3_tag_RM | LFS3_TAG_MAGIC, 0),
|
||||||
LFS3_tag_RM | LFS3_TAG_MAGIC, 0))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -727,9 +727,9 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(2, LFS3_TAG_MAGIC, 0, LFS3_FROM_BUF, 8),
|
||||||
LFS3_TAG_MAGIC, 0,
|
LFS3_RATTR_ARG("lottlefs"),
|
||||||
"lottlefs", 8))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -751,11 +751,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(2, LFS3_TAG_VERSION, 0, LFS3_FROM_BUF, 2),
|
||||||
LFS3_TAG_VERSION, 0,
|
LFS3_RATTR_ARG(((const uint8_t[2]){
|
||||||
((const uint8_t[2]){
|
LFS3_DISK_VERSION_MAJOR+1,
|
||||||
LFS3_DISK_VERSION_MAJOR+1,
|
0})),
|
||||||
0}), 2))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -777,11 +777,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(2, LFS3_TAG_VERSION, 0, LFS3_FROM_BUF, 2),
|
||||||
LFS3_TAG_VERSION, 0,
|
LFS3_RATTR_ARG(((const uint8_t[2]){
|
||||||
((const uint8_t[2]){
|
LFS3_DISK_VERSION_MAJOR,
|
||||||
LFS3_DISK_VERSION_MAJOR,
|
LFS3_DISK_VERSION_MINOR+1})),
|
||||||
LFS3_DISK_VERSION_MINOR+1}), 2))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -804,10 +804,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_LE32(
|
LFS3_RATTR(2, LFS3_TAG_RCOMPAT, 0, LFS3_FROM_LE32),
|
||||||
LFS3_TAG_RCOMPAT, 0,
|
LFS3_RATTR_ARG(
|
||||||
lfs3_rcompat(&lfs3)
|
lfs3_rcompat(&lfs3)
|
||||||
| LFS3_RCOMPAT_NONSTANDARD))) => 0;
|
| LFS3_RCOMPAT_NONSTANDARD),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -830,10 +831,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_LE32(
|
LFS3_RATTR(2, LFS3_TAG_WCOMPAT, 0, LFS3_FROM_LE32),
|
||||||
LFS3_TAG_WCOMPAT, 0,
|
LFS3_RATTR_ARG(
|
||||||
lfs3_wcompat(&lfs3)
|
lfs3_wcompat(&lfs3)
|
||||||
| LFS3_WCOMPAT_NONSTANDARD))) => 0;
|
| LFS3_WCOMPAT_NONSTANDARD),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -859,10 +861,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_LE32(
|
LFS3_RATTR(2, LFS3_TAG_OCOMPAT, 0, LFS3_FROM_LE32),
|
||||||
LFS3_TAG_OCOMPAT, 0,
|
LFS3_RATTR_ARG(
|
||||||
lfs3_ocompat(&lfs3)
|
lfs3_ocompat(&lfs3)
|
||||||
| LFS3_OCOMPAT_NONSTANDARD))) => 0;
|
| LFS3_OCOMPAT_NONSTANDARD),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should _not_ fail, ocompat should always be ignored
|
// mount should _not_ fail, ocompat should always be ignored
|
||||||
@@ -886,10 +889,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_LE32(
|
LFS3_RATTR(2, LFS3_TAG_WCOMPAT, 0, LFS3_FROM_LE32),
|
||||||
LFS3_TAG_WCOMPAT, 0,
|
LFS3_RATTR_ARG(
|
||||||
lfs3_wcompat(&lfs3)
|
lfs3_wcompat(&lfs3)
|
||||||
| LFS3_WCOMPAT_RDONLY))) => 0;
|
| LFS3_WCOMPAT_RDONLY),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -914,10 +918,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_LE32(
|
LFS3_RATTR(2, LFS3_TAG_RCOMPAT, 0, LFS3_FROM_LE32),
|
||||||
LFS3_TAG_RCOMPAT, 0,
|
LFS3_RATTR_ARG(
|
||||||
lfs3_rcompat(&lfs3)
|
lfs3_rcompat(&lfs3)
|
||||||
| LFS3_RCOMPAT_WRONLY))) => 0;
|
| LFS3_RCOMPAT_WRONLY),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -939,17 +944,17 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
uint8_t overflow[OVERFLOW / 8];
|
uint8_t rcompat_buf[sizeof(uint32_t) + OVERFLOW/8];
|
||||||
memset(overflow, 0, sizeof(overflow));
|
memset(rcompat_buf, 0, sizeof(rcompat_buf));
|
||||||
overflow[FLAG / 8] |= 1 << (FLAG % 8);
|
lfs3_data_fromle32(lfs3_rcompat(&lfs3), rcompat_buf);
|
||||||
|
rcompat_buf[sizeof(uint32_t) + FLAG/8] |= 1 << (FLAG%8);
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t rcompat_buf[LFS3_LE32_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_RCOMPAT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_RCOMPAT, 0,
|
LFS3_RATTR_ARG(sizeof(rcompat_buf)),
|
||||||
lfs3_data_fromle32(lfs3_rcompat(&lfs3), rcompat_buf),
|
LFS3_RATTR_ARG(rcompat_buf),
|
||||||
LFS3_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -973,17 +978,17 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
uint8_t overflow[OVERFLOW / 8];
|
uint8_t wcompat_buf[sizeof(uint32_t) + OVERFLOW/8];
|
||||||
memset(overflow, 0, sizeof(overflow));
|
memset(wcompat_buf, 0, sizeof(wcompat_buf));
|
||||||
overflow[FLAG / 8] |= 1 << (FLAG % 8);
|
lfs3_data_fromle32(lfs3_wcompat(&lfs3), wcompat_buf);
|
||||||
|
wcompat_buf[sizeof(uint32_t) + FLAG/8] |= 1 << (FLAG%8);
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t wcompat_buf[LFS3_LE32_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_WCOMPAT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_WCOMPAT, 0,
|
LFS3_RATTR_ARG(sizeof(wcompat_buf)),
|
||||||
lfs3_data_fromle32(lfs3_wcompat(&lfs3), wcompat_buf),
|
LFS3_RATTR_ARG(wcompat_buf),
|
||||||
LFS3_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -1007,17 +1012,16 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
uint8_t overflow[OVERFLOW / 8];
|
uint8_t ocompat_buf[sizeof(uint32_t) + OVERFLOW/8];
|
||||||
memset(overflow, 0, sizeof(overflow));
|
memset(ocompat_buf, 0, sizeof(ocompat_buf));
|
||||||
overflow[FLAG / 8] |= 1 << (FLAG % 8);
|
ocompat_buf[sizeof(uint32_t) + FLAG/8] |= 1 << (FLAG%8);
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t ocompat_buf[LFS3_LE32_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_OCOMPAT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_OCOMPAT, 0,
|
LFS3_RATTR_ARG(sizeof(ocompat_buf)),
|
||||||
lfs3_data_fromle32(lfs3_ocompat(&lfs3), ocompat_buf),
|
LFS3_RATTR_ARG(ocompat_buf),
|
||||||
LFS3_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should _not_ fail, ocompat should always be ignored
|
// mount should _not_ fail, ocompat should always be ignored
|
||||||
@@ -1040,16 +1044,16 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
uint8_t overflow[OVERFLOW / 8];
|
uint8_t rcompat_buf[sizeof(uint32_t) + OVERFLOW/8];
|
||||||
memset(overflow, 0, sizeof(overflow));
|
memset(rcompat_buf, 0, sizeof(rcompat_buf));
|
||||||
|
lfs3_data_fromle32(lfs3_rcompat(&lfs3), rcompat_buf);
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t rcompat_buf[LFS3_LE32_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_RCOMPAT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_RCOMPAT, 0,
|
LFS3_RATTR_ARG(sizeof(rcompat_buf)),
|
||||||
lfs3_data_fromle32(lfs3_rcompat(&lfs3), rcompat_buf),
|
LFS3_RATTR_ARG(rcompat_buf),
|
||||||
LFS3_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should _not_ fail, extra zeros should be ignored
|
// mount should _not_ fail, extra zeros should be ignored
|
||||||
@@ -1074,16 +1078,16 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
uint8_t overflow[OVERFLOW / 8];
|
uint8_t wcompat_buf[sizeof(uint32_t) + OVERFLOW/8];
|
||||||
memset(overflow, 0, sizeof(overflow));
|
memset(wcompat_buf, 0, sizeof(wcompat_buf));
|
||||||
|
lfs3_data_fromle32(lfs3_wcompat(&lfs3), wcompat_buf);
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t wcompat_buf[LFS3_LE32_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_WCOMPAT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_WCOMPAT, 0,
|
LFS3_RATTR_ARG(sizeof(wcompat_buf)),
|
||||||
lfs3_data_fromle32(lfs3_wcompat(&lfs3), wcompat_buf),
|
LFS3_RATTR_ARG(wcompat_buf),
|
||||||
LFS3_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should _not_ fail, extra zeros should be ignored
|
// mount should _not_ fail, extra zeros should be ignored
|
||||||
@@ -1105,16 +1109,15 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
uint8_t overflow[OVERFLOW / 8];
|
uint8_t ocompat_buf[sizeof(uint32_t) + OVERFLOW/8];
|
||||||
memset(overflow, 0, sizeof(overflow));
|
memset(ocompat_buf, 0, sizeof(ocompat_buf));
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t ocompat_buf[LFS3_LE32_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_OCOMPAT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_OCOMPAT, 0,
|
LFS3_RATTR_ARG(sizeof(ocompat_buf)),
|
||||||
lfs3_data_fromle32(lfs3_ocompat(&lfs3), ocompat_buf),
|
LFS3_RATTR_ARG(ocompat_buf),
|
||||||
LFS3_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should _not_ fail, extra zeros should be ignored
|
// mount should _not_ fail, extra zeros should be ignored
|
||||||
@@ -1139,11 +1142,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_GEOMETRY(
|
LFS3_RATTR(2, LFS3_TAG_GEOMETRY, 0, LFS3_FROM_GEOMETRY),
|
||||||
LFS3_TAG_GEOMETRY, 0,
|
LFS3_RATTR_ARG((&(lfs3_geometry_t){
|
||||||
(&(lfs3_geometry_t){
|
INC_BLOCK_SIZE,
|
||||||
INC_BLOCK_SIZE,
|
BLOCK_COUNT})),
|
||||||
BLOCK_COUNT})))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -1166,11 +1169,11 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_GEOMETRY(
|
LFS3_RATTR(2, LFS3_TAG_GEOMETRY, 0, LFS3_FROM_GEOMETRY),
|
||||||
LFS3_TAG_GEOMETRY, 0,
|
LFS3_RATTR_ARG((&(lfs3_geometry_t){
|
||||||
(&(lfs3_geometry_t){
|
BLOCK_SIZE,
|
||||||
BLOCK_SIZE,
|
INC_BLOCK_COUNT})),
|
||||||
INC_BLOCK_COUNT})))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -1193,9 +1196,9 @@ code = '''
|
|||||||
// is not a user API
|
// is not a user API
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_LEB128(
|
LFS3_RATTR(2, LFS3_TAG_NAMELIMIT, 0, LFS3_FROM_LEB128),
|
||||||
LFS3_TAG_NAMELIMIT, 0,
|
LFS3_RATTR_ARG(INC_NAME_LIMIT),
|
||||||
INC_NAME_LIMIT))) => 0;
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -1215,17 +1218,24 @@ code = '''
|
|||||||
//
|
//
|
||||||
// note we're messing around with internals to do this! this
|
// note we're messing around with internals to do this! this
|
||||||
// is not a user API
|
// is not a user API
|
||||||
|
|
||||||
|
// it's a bit difficult to test this since file limit
|
||||||
|
// is usually our integer limit, but we can force a
|
||||||
|
// larger value by inserting an extra byte into our
|
||||||
|
// leb128 encoding
|
||||||
|
uint8_t filelimit_buf[1+LFS3_LEB128_DSIZE];
|
||||||
|
filelimit_buf[0] = 0xff;
|
||||||
|
lfs3_ssize_t d_ = lfs3_toleb128(LFS3_FILE_MAX,
|
||||||
|
filelimit_buf+1, LFS3_LEB128_DSIZE);
|
||||||
|
assert(d_ >= 0);
|
||||||
|
lfs3_size_t d = 1 + d_;
|
||||||
|
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
uint8_t file_limit_buf[LFS3_LEB128_DSIZE];
|
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(3, LFS3_TAG_FILELIMIT, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_FILELIMIT, 0,
|
LFS3_RATTR_ARG(d),
|
||||||
// it's a bit difficult to test this since file limit
|
LFS3_RATTR_ARG(filelimit_buf),
|
||||||
// is usually our integer limit, but we can force a
|
LFS3_RATTR_NULL)) => 0;
|
||||||
// larger value by inserting an extra byte into our
|
|
||||||
// leb128 encoding
|
|
||||||
LFS3_DATA_BUF("\xff", 1),
|
|
||||||
lfs3_data_fromleb128(LFS3_FILE_MAX, file_limit_buf)))) => 0;
|
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -1244,9 +1254,10 @@ code = '''
|
|||||||
// create an unknown config
|
// create an unknown config
|
||||||
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
lfs3_mount(&lfs3, LFS3_M_RDWR, CFG) => 0;
|
||||||
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &lfs3.mroot, LFS3_RATTRS(
|
||||||
LFS3_RATTR_BUF(
|
LFS3_RATTR(3, LFS3_TAG_CONFIG + 0x42, 0, LFS3_FROM_DATA),
|
||||||
LFS3_TAG_CONFIG + 0x42, 0,
|
LFS3_RATTR_ARG(strlen("oh no!")),
|
||||||
"oh no!", strlen("oh no!")))) => 0;
|
LFS3_RATTR_ARG("oh no!"),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount should now fail
|
// mount should now fail
|
||||||
@@ -1290,10 +1301,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -1377,10 +1390,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -1483,10 +1498,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -1592,10 +1609,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -1701,18 +1720,22 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "c";
|
path = "c";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -1818,10 +1841,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -1927,10 +1952,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
@@ -2036,10 +2063,12 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_TAG_REG;
|
&mdir, &did) => LFS3_TAG_REG;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
||||||
LFS3_tag_MASK8 | (LFS3_TAG_NAME + 0x13), 0,
|
LFS3_FROM_NAME),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(did),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(path),
|
||||||
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
lfs3_unmount(&lfs3) => 0;
|
lfs3_unmount(&lfs3) => 0;
|
||||||
|
|
||||||
// mount
|
// mount
|
||||||
|
|||||||
+661
-316
File diff suppressed because it is too large
Load Diff
+150
-120
@@ -4566,50 +4566,56 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/coldbrew";
|
path = "coffee/coldbrew";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/turkish";
|
path = "coffee/turkish";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/tubruk";
|
path = "coffee/tubruk";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/vietnamese";
|
path = "coffee/vietnamese";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/thai";
|
path = "coffee/thai";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// stat paths
|
// stat paths
|
||||||
struct lfs3_info info;
|
struct lfs3_info info;
|
||||||
@@ -4740,50 +4746,56 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coldbrew";
|
path = "coldbrew";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "turkish";
|
path = "turkish";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "tubruk";
|
path = "tubruk";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "vietnamese";
|
path = "vietnamese";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "thai";
|
path = "thai";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
if (DIR) {
|
if (DIR) {
|
||||||
lfs3_mkdir(&lfs3, "drip/coffee") => LFS3_ERR_NOTDIR;
|
lfs3_mkdir(&lfs3, "drip/coffee") => LFS3_ERR_NOTDIR;
|
||||||
@@ -5036,50 +5048,56 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/coldbrew";
|
path = "coffee/coldbrew";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/turkish";
|
path = "coffee/turkish";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/tubruk";
|
path = "coffee/tubruk";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/vietnamese";
|
path = "coffee/vietnamese";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/thai";
|
path = "coffee/thai";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// stat paths
|
// stat paths
|
||||||
struct lfs3_info info;
|
struct lfs3_info info;
|
||||||
@@ -5278,50 +5296,56 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/coldbrew";
|
path = "coffee/coldbrew";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/turkish";
|
path = "coffee/turkish";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/tubruk";
|
path = "coffee/tubruk";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/vietnamese";
|
path = "coffee/vietnamese";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/thai";
|
path = "coffee/thai";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// stat paths
|
// stat paths
|
||||||
struct lfs3_info info;
|
struct lfs3_info info;
|
||||||
@@ -5520,50 +5544,56 @@ code = '''
|
|||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/coldbrew";
|
path = "coffee/coldbrew";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/turkish";
|
path = "coffee/turkish";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/tubruk";
|
path = "coffee/tubruk";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/vietnamese";
|
path = "coffee/vietnamese";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
path = "coffee/thai";
|
path = "coffee/thai";
|
||||||
lfs3_mtree_pathlookup(&lfs3, &path,
|
lfs3_mtree_pathlookup(&lfs3, &path,
|
||||||
&mdir, &did) => LFS3_ERR_NOENT;
|
&mdir, &did) => LFS3_ERR_NOENT;
|
||||||
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
lfs3_mdir_commit(&lfs3, &mdir, LFS3_RATTRS(
|
||||||
LFS3_RATTR_CAT(
|
LFS3_RATTR(4, LFS3_TAG_NAME + 0x13, +1, LFS3_FROM_NAME),
|
||||||
LFS3_TAG_NAME + 0x13, +1,
|
LFS3_RATTR_ARG(did),
|
||||||
lfs3_data_fromleb128(did, (uint8_t[LFS3_LEB128_DSIZE]){0}),
|
LFS3_RATTR_ARG(path),
|
||||||
LFS3_DATA_BUF(path, lfs3_path_namelen(path))))) => 0;
|
LFS3_RATTR_ARG(lfs3_path_namelen(path)),
|
||||||
|
LFS3_RATTR_NULL)) => 0;
|
||||||
|
|
||||||
// stat paths
|
// stat paths
|
||||||
struct lfs3_info info;
|
struct lfs3_info info;
|
||||||
|
|||||||
+2031
-2338
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user