Fully adopted lazy attr encoding
This fully adopts LFSR_RATTR__ and friends:
- LFSR_RATTR -> LFSR_RATTR__ or LFSR_RATTR_DATA__
- LFSR_RATTR_BUF -> LFSR_RATTR__
- LFSR_RATTR_CAT -> LFSR_RATTR_CAT__
- LFSR_RATTR_NOOP -> LFSR_RATTR_NOOP__
- LFSR_RATTR_NAME -> LFSR_RATTR_NAME__
Note the new LFSR_RATTR__ macro also lets us a drop the special rattr
macros, at the cost of a bit less type safety:
- LFSR_RATTR_RATTRS -> LFSR_RATTR__
- LFSR_RATTR_MOVE -> LFSR_RATTR__
- LFSR_RATTR_GRM -> LFSR_RATTR__ (we weren't using this?)
- LFSR_RATTR_SHRUBCOMMIT -> LFSR_RATTR__
Curiously, this ended up adding ~88 bytes to lfsr_file_carve:
function (0 added, 0 removed) osize nsize dsize
lfsr_file_carve 1228 1316 +88 (+7.2%)
lfsr_mdir_commit 2144 2152 +8 (+0.4%)
lfsr_mdir_commit__ 1192 1188 -4 (-0.3%)
lfsr_file_truncate 184 182 -2 (-1.1%)
lfsr_mount 98 96 -2 (-2.0%)
TOTAL 35508 35596 +88 (+0.2%)
I'm really not sure why, all I can think of is maybe the change from a
forced-inline function to a macro added a bunch of compiler noise?
Still, 80 bytes is not worth two competing LFSR_RATTR APIs. Though
it may be worth looking into this in the future.
Total code changes:
code stack ctx
before: 35508 2472 636
after: 35596 (+0.2%) 2472 (+0.0%) 636 (+0.0%)
This commit is contained in:
+37
-51
@@ -545,9 +545,9 @@ code = '''
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR__(
|
||||
LFSR_TAG_RM | LFSR_TAG_MAGIC, 0,
|
||||
LFSR_DATA_NULL()))) => 0;
|
||||
NULL, 0))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -569,9 +569,9 @@ code = '''
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR__(
|
||||
LFSR_TAG_MAGIC, 0,
|
||||
LFSR_DATA_BUF("lottlefs", 8)))) => 0;
|
||||
"lottlefs", 8))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -593,11 +593,11 @@ code = '''
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR__(
|
||||
LFSR_TAG_VERSION, 0,
|
||||
LFSR_DATA_BUF(((const uint8_t[2]){
|
||||
((const uint8_t[2]){
|
||||
LFS_DISK_VERSION_MAJOR+1,
|
||||
0}), 2)))) => 0;
|
||||
0}), 2))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -619,11 +619,11 @@ code = '''
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR__(
|
||||
LFSR_TAG_VERSION, 0,
|
||||
LFSR_DATA_BUF(((const uint8_t[2]){
|
||||
((const uint8_t[2]){
|
||||
LFS_DISK_VERSION_MAJOR,
|
||||
LFS_DISK_VERSION_MINOR+1}), 2)))) => 0;
|
||||
LFS_DISK_VERSION_MINOR+1}), 2))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -645,14 +645,11 @@ code = '''
|
||||
// note we're messing around with internals to do this! this
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t rcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR_LE32__(
|
||||
LFSR_TAG_RCOMPAT, 0,
|
||||
LFSR_DATA_LE32(
|
||||
LFSR_RCOMPAT_COMPAT
|
||||
| LFSR_RCOMPAT_NONSTANDARD,
|
||||
rcompat_buf)))) => 0;
|
||||
LFSR_RCOMPAT_COMPAT
|
||||
| LFSR_RCOMPAT_NONSTANDARD))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -674,14 +671,11 @@ code = '''
|
||||
// note we're messing around with internals to do this! this
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t wcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR_LE32__(
|
||||
LFSR_TAG_WCOMPAT, 0,
|
||||
LFSR_DATA_LE32(
|
||||
LFSR_WCOMPAT_COMPAT
|
||||
| LFSR_WCOMPAT_NONSTANDARD,
|
||||
wcompat_buf)))) => 0;
|
||||
LFSR_WCOMPAT_COMPAT
|
||||
| LFSR_WCOMPAT_NONSTANDARD))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -706,14 +700,11 @@ code = '''
|
||||
// note we're messing around with internals to do this! this
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t ocompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR_LE32__(
|
||||
LFSR_TAG_OCOMPAT, 0,
|
||||
LFSR_DATA_LE32(
|
||||
LFSR_OCOMPAT_COMPAT
|
||||
| LFSR_OCOMPAT_NONSTANDARD,
|
||||
ocompat_buf)))) => 0;
|
||||
LFSR_OCOMPAT_COMPAT
|
||||
| LFSR_OCOMPAT_NONSTANDARD))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should _not_ fail, ocompat should always be ignored
|
||||
@@ -736,14 +727,11 @@ code = '''
|
||||
// note we're messing around with internals to do this! this
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t wcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR_LE32__(
|
||||
LFSR_TAG_WCOMPAT, 0,
|
||||
LFSR_DATA_LE32(
|
||||
LFSR_WCOMPAT_COMPAT
|
||||
| LFSR_WCOMPAT_RDONLY,
|
||||
wcompat_buf)))) => 0;
|
||||
LFSR_WCOMPAT_COMPAT
|
||||
| LFSR_WCOMPAT_RDONLY))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -767,14 +755,11 @@ code = '''
|
||||
// note we're messing around with internals to do this! this
|
||||
// is not a user API
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t rcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR_LE32__(
|
||||
LFSR_TAG_RCOMPAT, 0,
|
||||
LFSR_DATA_LE32(
|
||||
LFSR_RCOMPAT_COMPAT
|
||||
| LFSR_RCOMPAT_WRONLY,
|
||||
rcompat_buf)))) => 0;
|
||||
LFSR_RCOMPAT_COMPAT
|
||||
| LFSR_RCOMPAT_WRONLY))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -803,7 +788,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t rcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_RCOMPAT, 0,
|
||||
LFSR_DATA_LE32(LFSR_RCOMPAT_COMPAT, rcompat_buf),
|
||||
LFSR_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
||||
@@ -837,7 +822,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t wcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_WCOMPAT, 0,
|
||||
LFSR_DATA_LE32(LFSR_WCOMPAT_COMPAT, wcompat_buf),
|
||||
LFSR_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
||||
@@ -871,7 +856,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t ocompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_OCOMPAT, 0,
|
||||
LFSR_DATA_LE32(LFSR_OCOMPAT_COMPAT, ocompat_buf),
|
||||
LFSR_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
||||
@@ -903,7 +888,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t rcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_RCOMPAT, 0,
|
||||
LFSR_DATA_LE32(LFSR_RCOMPAT_COMPAT, rcompat_buf),
|
||||
LFSR_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
||||
@@ -937,7 +922,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t wcompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_WCOMPAT, 0,
|
||||
LFSR_DATA_LE32(LFSR_WCOMPAT_COMPAT, wcompat_buf),
|
||||
LFSR_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
||||
@@ -968,7 +953,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t ocompat_buf[LFSR_LE32_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_OCOMPAT, 0,
|
||||
LFSR_DATA_LE32(LFSR_OCOMPAT_COMPAT, ocompat_buf),
|
||||
LFSR_DATA_BUF(overflow, sizeof(overflow))))) => 0;
|
||||
@@ -1075,7 +1060,7 @@ code = '''
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
uint8_t file_limit_buf[LFSR_LEB128_DSIZE];
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR_CAT(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_FILELIMIT, 0,
|
||||
// it's a bit difficult to test this since file limit
|
||||
// is usually our integer limit, but we can force a
|
||||
@@ -1101,9 +1086,9 @@ code = '''
|
||||
// create an unknown config
|
||||
lfsr_mount(&lfs, LFS_M_RDWR, CFG) => 0;
|
||||
lfsr_mdir_commit(&lfs, &lfs.mroot, LFSR_RATTRS(
|
||||
LFSR_RATTR(
|
||||
LFSR_RATTR__(
|
||||
LFSR_TAG_CONFIG + 0x13, 0,
|
||||
LFSR_DATA_BUF("oh no!", strlen("oh no!"))))) => 0;
|
||||
"oh no!", strlen("oh no!")))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount should now fail
|
||||
@@ -1147,9 +1132,10 @@ code = '''
|
||||
lfsr_mtree_pathlookup(&lfs, &path,
|
||||
&mdir, NULL, &did) => 0;
|
||||
lfsr_mdir_commit(&lfs, &mdir, LFSR_RATTRS(
|
||||
LFSR_RATTR_NAME(
|
||||
LFSR_RATTR_CAT__(
|
||||
LFSR_TAG_SUB | (LFSR_TAG_NAME + 0x13), 0,
|
||||
did, path, lfsr_path_namelen(path)))) => 0;
|
||||
LFSR_DATA_LEB128(did, (uint8_t[LFSR_LEB128_DSIZE]){0}),
|
||||
LFSR_DATA_BUF(path, lfsr_path_namelen(path))))) => 0;
|
||||
lfsr_unmount(&lfs) => 0;
|
||||
|
||||
// mount
|
||||
|
||||
Reference in New Issue
Block a user