Reversed LFSR_ATTR id/tag argument order
I've been wanting to make this change for a while now (tag,id => id,tag). The id,tag order matches the common lexicographic order used for sorting tuples. Sorting tag,id tuples by their id first is less common. The reason for this order in the codebase is because all attrs on disk start with their tag first, since its decoding determines the purpose of the id field (keep in mind this includes other non-tree tags such as crcs, alts, etc). But with the move to storing weights instead of tags on disk, this gives us a clear point to switch from tag,w to id,tag ordering. I may be thinking to much about this, but it does affect a significant amount of the codebase.
This commit is contained in:
@@ -613,7 +613,7 @@ static inline lfsr_tag_t lfsr_tag_key(lfsr_tag_t tag) {
|
|||||||
|
|
||||||
static inline bool lfsr_tag_follow(lfsr_tag_t alt, lfs_size_t weight,
|
static inline bool lfsr_tag_follow(lfsr_tag_t alt, lfs_size_t weight,
|
||||||
lfs_ssize_t lower, lfs_ssize_t upper,
|
lfs_ssize_t lower, lfs_ssize_t upper,
|
||||||
lfsr_tag_t tag, lfs_ssize_t id) {
|
lfs_ssize_t id, lfsr_tag_t tag) {
|
||||||
if (lfsr_tag_isgt(alt)) {
|
if (lfsr_tag_isgt(alt)) {
|
||||||
return id > upper - (lfs_ssize_t)weight - 1
|
return id > upper - (lfs_ssize_t)weight - 1
|
||||||
|| (id == upper - (lfs_ssize_t)weight - 1
|
|| (id == upper - (lfs_ssize_t)weight - 1
|
||||||
@@ -629,12 +629,12 @@ static inline bool lfsr_tag_follow2(
|
|||||||
lfsr_tag_t alt, lfs_size_t weight,
|
lfsr_tag_t alt, lfs_size_t weight,
|
||||||
lfsr_tag_t alt2, lfs_size_t weight2,
|
lfsr_tag_t alt2, lfs_size_t weight2,
|
||||||
lfs_ssize_t lower, lfs_ssize_t upper,
|
lfs_ssize_t lower, lfs_ssize_t upper,
|
||||||
lfsr_tag_t tag, lfs_ssize_t id) {
|
lfs_ssize_t id, lfsr_tag_t tag) {
|
||||||
if (lfsr_tag_isred(alt2) && lfsr_tag_isparallel(alt, alt2)) {
|
if (lfsr_tag_isred(alt2) && lfsr_tag_isparallel(alt, alt2)) {
|
||||||
weight += weight2;
|
weight += weight2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return lfsr_tag_follow(alt, weight, lower, upper, tag, id);
|
return lfsr_tag_follow(alt, weight, lower, upper, id, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool lfsr_tag_prune2(
|
static inline bool lfsr_tag_prune2(
|
||||||
@@ -647,13 +647,13 @@ static inline bool lfsr_tag_prune2(
|
|||||||
alt, weight,
|
alt, weight,
|
||||||
alt2, weight2,
|
alt2, weight2,
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
lower_tag, lower_id);
|
lower_id, lower_tag);
|
||||||
} else {
|
} else {
|
||||||
return lfsr_tag_follow2(
|
return lfsr_tag_follow2(
|
||||||
alt, weight,
|
alt, weight,
|
||||||
alt2, weight2,
|
alt2, weight2,
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
upper_tag-0x10, upper_id-1);
|
upper_id-1, upper_tag-0x10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -766,29 +766,29 @@ struct lfs_diskoff {
|
|||||||
sizeof((struct lfs_mattr[]){__VA_ARGS__}) / sizeof(struct lfs_mattr)
|
sizeof((struct lfs_mattr[]){__VA_ARGS__}) / sizeof(struct lfs_mattr)
|
||||||
|
|
||||||
typedef struct lfsr_attr {
|
typedef struct lfsr_attr {
|
||||||
lfsr_tag_t tag;
|
|
||||||
lfs_ssize_t id;
|
lfs_ssize_t id;
|
||||||
|
lfsr_tag_t tag;
|
||||||
lfs_ssize_t delta;
|
lfs_ssize_t delta;
|
||||||
lfsr_data_t data;
|
lfsr_data_t data;
|
||||||
} lfsr_attr_t;
|
} lfsr_attr_t;
|
||||||
|
|
||||||
#define LFSR_ATTR_(_tag, _id, _delta, _buf, _len) \
|
#define LFSR_ATTR_(_id, _tag, _delta, _buf, _len) \
|
||||||
((const lfsr_attr_t){ \
|
((const lfsr_attr_t){ \
|
||||||
_tag, _id, _delta, \
|
_id, _tag, _delta, \
|
||||||
LFSR_DATA_BUF(_buf, _len)})
|
LFSR_DATA_BUF(_buf, _len)})
|
||||||
|
|
||||||
#define LFSR_ATTR(_type, _id, _delta, _buf, _len) \
|
#define LFSR_ATTR(_id, _type, _delta, _buf, _len) \
|
||||||
LFSR_ATTR_(LFSR_TAG_##_type, _id, _delta, _buf, _len)
|
LFSR_ATTR_(_id, LFSR_TAG_##_type, _delta, _buf, _len)
|
||||||
|
|
||||||
#define LFSR_ATTR_DISK_(_tag, _id, _delta, _block, _off, _len) \
|
#define LFSR_ATTR_DISK_(_id, _tag, _delta, _block, _off, _len) \
|
||||||
((const lfsr_attr_t){ \
|
((const lfsr_attr_t){ \
|
||||||
_tag, _id, _delta, \
|
_id, _tag, _delta, \
|
||||||
LFSR_DATA_DISK(_block, _off, _len)})
|
LFSR_DATA_DISK(_block, _off, _len)})
|
||||||
|
|
||||||
#define LFSR_ATTR_DISK(_type, _id, _delta, _block, _off, _len) \
|
#define LFSR_ATTR_DISK(_id, _type, _delta, _block, _off, _len) \
|
||||||
LFSR_ATTR_DISK_(LFSR_TAG_##_type, _id, _delta, _block, _off, _len)
|
LFSR_ATTR_DISK_(_id, LFSR_TAG_##_type, _delta, _block, _off, _len)
|
||||||
|
|
||||||
#define LFSR_ATTR_NOOP LFSR_ATTR(UNR, 0, 0, NULL, 0)
|
#define LFSR_ATTR_NOOP LFSR_ATTR(-1, UNR, 0, NULL, 0)
|
||||||
|
|
||||||
#define LFSR_ATTRS(...) \
|
#define LFSR_ATTRS(...) \
|
||||||
(lfsr_attr_t[]){__VA_ARGS__}, \
|
(lfsr_attr_t[]){__VA_ARGS__}, \
|
||||||
@@ -1524,8 +1524,8 @@ static int lfsr_rbyd_fetch(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
static int lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
||||||
lfsr_tag_t tag, lfs_ssize_t id,
|
lfs_ssize_t id, lfsr_tag_t tag,
|
||||||
lfsr_tag_t *tag_, lfs_ssize_t *id_, lfs_size_t *weight_,
|
lfs_ssize_t *id_, lfsr_tag_t *tag_, lfs_size_t *weight_,
|
||||||
// TODO should this take lfsr_data_t for consistency?
|
// TODO should this take lfsr_data_t for consistency?
|
||||||
lfs_off_t *off_, lfs_size_t *size_) {
|
lfs_off_t *off_, lfs_size_t *size_) {
|
||||||
// keep track of bounds as we descend down the tree
|
// keep track of bounds as we descend down the tree
|
||||||
@@ -1556,7 +1556,7 @@ static int lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
|||||||
|
|
||||||
// found an alt?
|
// found an alt?
|
||||||
if (lfsr_tag_isalt(alt)) {
|
if (lfsr_tag_isalt(alt)) {
|
||||||
if (lfsr_tag_follow(alt, weight, lower, upper, tag, id)) {
|
if (lfsr_tag_follow(alt, weight, lower, upper, id, tag)) {
|
||||||
lfsr_tag_flip(&alt, &weight, lower, upper);
|
lfsr_tag_flip(&alt, &weight, lower, upper);
|
||||||
lfsr_tag_trim(alt, weight, &lower, &upper, NULL, NULL);
|
lfsr_tag_trim(alt, weight, &lower, &upper, NULL, NULL);
|
||||||
branch = branch - jump;
|
branch = branch - jump;
|
||||||
@@ -1568,8 +1568,8 @@ static int lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
|||||||
// found end of tree?
|
// found end of tree?
|
||||||
} else {
|
} else {
|
||||||
// update the tag id
|
// update the tag id
|
||||||
lfsr_tag_t tag__ = alt;
|
|
||||||
lfs_ssize_t id__ = upper-1;
|
lfs_ssize_t id__ = upper-1;
|
||||||
|
lfsr_tag_t tag__ = alt;
|
||||||
|
|
||||||
// not what we're looking for?
|
// not what we're looking for?
|
||||||
if (id__ < id
|
if (id__ < id
|
||||||
@@ -1580,12 +1580,12 @@ static int lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
|||||||
|
|
||||||
// save what we found
|
// save what we found
|
||||||
// TODO how many of these need to be conditional?
|
// TODO how many of these need to be conditional?
|
||||||
if (tag_) {
|
|
||||||
*tag_ = tag__;
|
|
||||||
}
|
|
||||||
if (id_) {
|
if (id_) {
|
||||||
*id_ = id__;
|
*id_ = id__;
|
||||||
}
|
}
|
||||||
|
if (tag_) {
|
||||||
|
*tag_ = tag__;
|
||||||
|
}
|
||||||
if (weight_) {
|
if (weight_) {
|
||||||
*weight_ = id__ - lower;
|
*weight_ = id__ - lower;
|
||||||
}
|
}
|
||||||
@@ -1602,13 +1602,13 @@ static int lfsr_rbyd_lookup(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static lfs_ssize_t lfsr_rbyd_get(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
static lfs_ssize_t lfsr_rbyd_get(lfs_t *lfs, const lfsr_rbyd_t *rbyd,
|
||||||
lfsr_tag_t tag, lfs_ssize_t id, void *buffer, lfs_size_t size) {
|
lfs_ssize_t id, lfsr_tag_t tag, void *buffer, lfs_size_t size) {
|
||||||
lfsr_tag_t tag_;
|
|
||||||
lfs_ssize_t id_;
|
lfs_ssize_t id_;
|
||||||
|
lfsr_tag_t tag_;
|
||||||
lfs_off_t off_;
|
lfs_off_t off_;
|
||||||
lfs_size_t size_;
|
lfs_size_t size_;
|
||||||
int err = lfsr_rbyd_lookup(lfs, rbyd, tag, id,
|
int err = lfsr_rbyd_lookup(lfs, rbyd, id, tag,
|
||||||
&tag_, &id_, NULL, &off_, &size_);
|
&id_, &tag_, NULL, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -1648,8 +1648,8 @@ static lfs_ssize_t lfsr_rbyd_bisect(lfs_t *lfs, const lfsr_rbyd_t *rbyd) {
|
|||||||
while (true) {
|
while (true) {
|
||||||
lfs_size_t size;
|
lfs_size_t size;
|
||||||
int err = lfsr_rbyd_lookup(lfs, rbyd,
|
int err = lfsr_rbyd_lookup(lfs, rbyd,
|
||||||
lfsr_tag_next(tag), id,
|
id, lfsr_tag_next(tag),
|
||||||
&tag, &id, NULL, NULL, &size);
|
&id, &tag, NULL, NULL, &size);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -1668,8 +1668,8 @@ static lfs_ssize_t lfsr_rbyd_bisect(lfs_t *lfs, const lfsr_rbyd_t *rbyd) {
|
|||||||
while (true) {
|
while (true) {
|
||||||
lfs_size_t size;
|
lfs_size_t size;
|
||||||
int err = lfsr_rbyd_lookup(lfs, rbyd,
|
int err = lfsr_rbyd_lookup(lfs, rbyd,
|
||||||
lfsr_tag_next(tag), id,
|
id, lfsr_tag_next(tag),
|
||||||
&tag, &id, NULL, NULL, &size);
|
&id, &tag, NULL, NULL, &size);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -1922,7 +1922,7 @@ static void lfsr_rbyd_p_red(
|
|||||||
|
|
||||||
// core rbyd algorithm
|
// core rbyd algorithm
|
||||||
static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
||||||
lfsr_tag_t tag, lfs_ssize_t id, lfs_ssize_t delta,
|
lfs_ssize_t id, lfsr_tag_t tag, lfs_ssize_t delta,
|
||||||
lfsr_data_t data) {
|
lfsr_data_t data) {
|
||||||
// never write zero tags to disk, use unr if tag contains no data
|
// never write zero tags to disk, use unr if tag contains no data
|
||||||
LFS_ASSERT(tag != 0);
|
LFS_ASSERT(tag != 0);
|
||||||
@@ -2063,11 +2063,11 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
|||||||
&& lfsr_tag_follow2(alt, weight,
|
&& lfsr_tag_follow2(alt, weight,
|
||||||
p_alts[0], p_weights[0],
|
p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
tag_, id_)
|
id_, tag_)
|
||||||
!= lfsr_tag_follow2(alt, weight,
|
!= lfsr_tag_follow2(alt, weight,
|
||||||
p_alts[0], p_weights[0],
|
p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
other_tag_, other_id_)) {
|
other_id_, other_tag_)) {
|
||||||
// first take care of any lingering red alts
|
// first take care of any lingering red alts
|
||||||
if (lfsr_tag_isred(p_alts[0])) {
|
if (lfsr_tag_isred(p_alts[0])) {
|
||||||
alt = lfsr_tag_setblack(p_alts[0]);
|
alt = lfsr_tag_setblack(p_alts[0]);
|
||||||
@@ -2137,7 +2137,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
|||||||
alt, weight,
|
alt, weight,
|
||||||
p_alts[0], p_weights[0],
|
p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
tag_, id_)) {
|
id_, tag_)) {
|
||||||
lfsr_tag_flip2(&alt, &weight,
|
lfsr_tag_flip2(&alt, &weight,
|
||||||
p_alts[0], p_weights[0],
|
p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id);
|
lower_id, upper_id);
|
||||||
@@ -2191,7 +2191,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
|||||||
alt, weight,
|
alt, weight,
|
||||||
p_alts[0], p_weights[0],
|
p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
tag_, id_)) {
|
id_, tag_)) {
|
||||||
lfsr_tag_flip2(&alt, &weight,
|
lfsr_tag_flip2(&alt, &weight,
|
||||||
p_alts[0], p_weights[0],
|
p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id);
|
lower_id, upper_id);
|
||||||
@@ -2207,7 +2207,7 @@ static int lfsr_rbyd_append(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
|||||||
if (lfsr_tag_isred(p_alts[0])
|
if (lfsr_tag_isred(p_alts[0])
|
||||||
&& lfsr_tag_follow(p_alts[0], p_weights[0],
|
&& lfsr_tag_follow(p_alts[0], p_weights[0],
|
||||||
lower_id, upper_id,
|
lower_id, upper_id,
|
||||||
tag_, id_)) {
|
id_, tag_)) {
|
||||||
lfs_swap16(&p_alts[0], &alt);
|
lfs_swap16(&p_alts[0], &alt);
|
||||||
lfs_swap32(&p_weights[0], &weight);
|
lfs_swap32(&p_weights[0], &weight);
|
||||||
lfs_swap32(&p_jumps[0], &jump);
|
lfs_swap32(&p_jumps[0], &jump);
|
||||||
@@ -2411,7 +2411,7 @@ static int lfsr_rbyd_commit(lfs_t *lfs, lfsr_rbyd_t *rbyd,
|
|||||||
// append each tag to the tree
|
// append each tag to the tree
|
||||||
for (lfs_size_t i = 0; i < attr_count; i++) {
|
for (lfs_size_t i = 0; i < attr_count; i++) {
|
||||||
int err = lfsr_rbyd_append(lfs, &rbyd_,
|
int err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
attrs[i].tag, attrs[i].id, attrs[i].delta, attrs[i].data);
|
attrs[i].id, attrs[i].tag, attrs[i].delta, attrs[i].data);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -2617,9 +2617,8 @@ static lfs_ssize_t lfsr_branch_fromdisk(
|
|||||||
|
|
||||||
static lfs_ssize_t lfsr_btree_lookup(lfs_t *lfs,
|
static lfs_ssize_t lfsr_btree_lookup(lfs_t *lfs,
|
||||||
const lfsr_btree_t *btree, lfs_size_t id,
|
const lfsr_btree_t *btree, lfs_size_t id,
|
||||||
lfsr_tag_t *tag_, lfs_size_t *id_,
|
lfs_size_t *id_, lfsr_rbyd_t *rbyd_, lfs_ssize_t *rid_,
|
||||||
lfsr_rbyd_t *rbyd_, lfs_ssize_t *rid_,
|
lfsr_tag_t *tag_, lfs_size_t *weight_,
|
||||||
lfs_size_t *weight_,
|
|
||||||
void *buffer, lfs_size_t size) {
|
void *buffer, lfs_size_t size) {
|
||||||
// in range?
|
// in range?
|
||||||
if (id >= btree->weight) {
|
if (id >= btree->weight) {
|
||||||
@@ -2632,13 +2631,13 @@ static lfs_ssize_t lfsr_btree_lookup(lfs_t *lfs,
|
|||||||
if (id_) {
|
if (id_) {
|
||||||
*id_ = btree->weight-1;
|
*id_ = btree->weight-1;
|
||||||
}
|
}
|
||||||
if (tag_) {
|
|
||||||
*tag_ = btree->tag;
|
|
||||||
}
|
|
||||||
// TODO need rid here?
|
// TODO need rid here?
|
||||||
if (rid_) {
|
if (rid_) {
|
||||||
*rid_ = -1;
|
*rid_ = -1;
|
||||||
}
|
}
|
||||||
|
if (tag_) {
|
||||||
|
*tag_ = btree->tag;
|
||||||
|
}
|
||||||
if (weight_) {
|
if (weight_) {
|
||||||
*weight_ = btree->weight;
|
*weight_ = btree->weight;
|
||||||
}
|
}
|
||||||
@@ -2661,21 +2660,21 @@ static lfs_ssize_t lfsr_btree_lookup(lfs_t *lfs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// each branch is a pair of optional name + on-disk structure
|
// each branch is a pair of optional name + on-disk structure
|
||||||
lfsr_tag_t tag__;
|
|
||||||
lfs_ssize_t rid__;
|
lfs_ssize_t rid__;
|
||||||
|
lfsr_tag_t tag__;
|
||||||
lfs_size_t weight__;
|
lfs_size_t weight__;
|
||||||
lfs_off_t off_;
|
lfs_off_t off_;
|
||||||
lfs_size_t size_;
|
lfs_size_t size_;
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, 0, rid,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, rid, 0,
|
||||||
&tag__, &rid__, &weight__, &off_, &size_);
|
&rid__, &tag__, &weight__, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lfsr_tag_suptype(tag__) == LFSR_TAG_NAME) {
|
if (lfsr_tag_suptype(tag__) == LFSR_TAG_NAME) {
|
||||||
// TODO what if we don't find a struct? ENOENT?
|
// TODO what if we don't find a struct? ENOENT?
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, LFSR_TAG_STRUCT, rid__,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, rid__, LFSR_TAG_STRUCT,
|
||||||
&tag__, NULL, NULL, &off_, &size_);
|
NULL, &tag__, NULL, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -2707,15 +2706,15 @@ static lfs_ssize_t lfsr_btree_lookup(lfs_t *lfs,
|
|||||||
if (id_) {
|
if (id_) {
|
||||||
*id_ = id + (rid__ - rid);
|
*id_ = id + (rid__ - rid);
|
||||||
}
|
}
|
||||||
if (tag_) {
|
|
||||||
*tag_ = tag__;
|
|
||||||
}
|
|
||||||
if (rbyd_) {
|
if (rbyd_) {
|
||||||
*rbyd_ = rbyd;
|
*rbyd_ = rbyd;
|
||||||
}
|
}
|
||||||
if (rid_) {
|
if (rid_) {
|
||||||
*rid_ = rid__;
|
*rid_ = rid__;
|
||||||
}
|
}
|
||||||
|
if (tag_) {
|
||||||
|
*tag_ = tag__;
|
||||||
|
}
|
||||||
if (weight_) {
|
if (weight_) {
|
||||||
*weight_ = weight__;
|
*weight_ = weight__;
|
||||||
}
|
}
|
||||||
@@ -2759,13 +2758,13 @@ static int lfsr_btree_parent(lfs_t *lfs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// each branch is a pair of optional name + on-disk structure
|
// each branch is a pair of optional name + on-disk structure
|
||||||
lfsr_tag_t tag__;
|
|
||||||
lfs_ssize_t rid__;
|
lfs_ssize_t rid__;
|
||||||
|
lfsr_tag_t tag__;
|
||||||
lfs_size_t weight__;
|
lfs_size_t weight__;
|
||||||
lfs_off_t off_;
|
lfs_off_t off_;
|
||||||
lfs_size_t size_;
|
lfs_size_t size_;
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, 0, rid,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, rid, 0,
|
||||||
&tag__, &rid__, &weight__, &off_, &size_);
|
&rid__, &tag__, &weight__, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
LFS_ASSERT(err != LFS_ERR_NOENT);
|
LFS_ASSERT(err != LFS_ERR_NOENT);
|
||||||
return err;
|
return err;
|
||||||
@@ -2773,8 +2772,8 @@ static int lfsr_btree_parent(lfs_t *lfs,
|
|||||||
|
|
||||||
if (lfsr_tag_suptype(tag__) == LFSR_TAG_NAME) {
|
if (lfsr_tag_suptype(tag__) == LFSR_TAG_NAME) {
|
||||||
// TODO what if we don't find a struct? ENOENT?
|
// TODO what if we don't find a struct? ENOENT?
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, LFSR_TAG_STRUCT, rid__,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, rid__, LFSR_TAG_STRUCT,
|
||||||
&tag__, NULL, NULL, &off_, &size_);
|
NULL, &tag__, NULL, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
LFS_ASSERT(err != LFS_ERR_NOENT);
|
LFS_ASSERT(err != LFS_ERR_NOENT);
|
||||||
return err;
|
return err;
|
||||||
@@ -2821,19 +2820,19 @@ static int lfsr_btree_parent(lfs_t *lfs,
|
|||||||
// TODO do we really need this?
|
// TODO do we really need this?
|
||||||
static lfs_ssize_t lfsr_btree_get(lfs_t *lfs,
|
static lfs_ssize_t lfsr_btree_get(lfs_t *lfs,
|
||||||
const lfsr_btree_t *btree, lfs_size_t id,
|
const lfsr_btree_t *btree, lfs_size_t id,
|
||||||
lfsr_tag_t *tag_, lfs_size_t *id_, lfs_size_t *weight_,
|
lfs_size_t *id_, lfsr_tag_t *tag_, lfs_size_t *weight_,
|
||||||
void *buffer, lfs_size_t size) {
|
void *buffer, lfs_size_t size) {
|
||||||
// note we need an allocated rbyd in btree lookup
|
// note we need an allocated rbyd in btree lookup
|
||||||
return lfsr_btree_lookup(lfs, btree, id,
|
return lfsr_btree_lookup(lfs, btree, id,
|
||||||
tag_, id_, NULL, NULL, weight_,
|
id_, NULL, NULL, tag_, weight_,
|
||||||
buffer, size);
|
buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static lfs_ssize_t lfsr_btree_find_(lfs_t *lfs,
|
static lfs_ssize_t lfsr_btree_find_(lfs_t *lfs,
|
||||||
const lfsr_btree_t *btree, const char *name, lfs_size_t name_len,
|
const lfsr_btree_t *btree, const char *name, lfs_size_t name_len,
|
||||||
lfsr_tag_t *tag_, lfs_size_t *id_,
|
lfs_size_t *id_,
|
||||||
lfsr_rbyd_t *rbyd_, lfs_ssize_t *rid_,
|
lfsr_rbyd_t *rbyd_, lfs_ssize_t *rid_,
|
||||||
lfs_size_t *weight_,
|
lfsr_tag_t *tag_, lfs_size_t *weight_,
|
||||||
void *buffer, lfs_size_t size) {
|
void *buffer, lfs_size_t size) {
|
||||||
// inlined?
|
// inlined?
|
||||||
if (btree->tag) {
|
if (btree->tag) {
|
||||||
@@ -2841,13 +2840,13 @@ static lfs_ssize_t lfsr_btree_find_(lfs_t *lfs,
|
|||||||
if (id_) {
|
if (id_) {
|
||||||
*id_ = btree->weight-1;
|
*id_ = btree->weight-1;
|
||||||
}
|
}
|
||||||
if (tag_) {
|
|
||||||
*tag_ = btree->tag;
|
|
||||||
}
|
|
||||||
// TODO need rid here?
|
// TODO need rid here?
|
||||||
if (rid_) {
|
if (rid_) {
|
||||||
*rid_ = -1;
|
*rid_ = -1;
|
||||||
}
|
}
|
||||||
|
if (tag_) {
|
||||||
|
*tag_ = btree->tag;
|
||||||
|
}
|
||||||
if (weight_) {
|
if (weight_) {
|
||||||
*weight_ = btree->weight;
|
*weight_ = btree->weight;
|
||||||
}
|
}
|
||||||
@@ -2888,16 +2887,16 @@ static lfs_ssize_t lfsr_btree_find_(lfs_t *lfs,
|
|||||||
lfs_size_t weight__;
|
lfs_size_t weight__;
|
||||||
lfs_off_t off_;
|
lfs_off_t off_;
|
||||||
lfs_size_t size_;
|
lfs_size_t size_;
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, 0, find.found_id,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, find.found_id, 0,
|
||||||
&tag__, &rid__, &weight__, &off_, &size_);
|
&rid__, &tag__, &weight__, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lfsr_tag_suptype(tag__) == LFSR_TAG_NAME) {
|
if (lfsr_tag_suptype(tag__) == LFSR_TAG_NAME) {
|
||||||
// TODO what if we don't find a struct? ENOENT?
|
// TODO what if we don't find a struct? ENOENT?
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, LFSR_TAG_STRUCT, rid__,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, rid__, LFSR_TAG_STRUCT,
|
||||||
&tag__, NULL, NULL, &off_, &size_);
|
NULL, &tag__, NULL, &off_, &size_);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -2929,15 +2928,15 @@ static lfs_ssize_t lfsr_btree_find_(lfs_t *lfs,
|
|||||||
if (id_) {
|
if (id_) {
|
||||||
*id_ = id + rid__;
|
*id_ = id + rid__;
|
||||||
}
|
}
|
||||||
if (tag_) {
|
|
||||||
*tag_ = tag__;
|
|
||||||
}
|
|
||||||
if (rbyd_) {
|
if (rbyd_) {
|
||||||
*rbyd_ = rbyd;
|
*rbyd_ = rbyd;
|
||||||
}
|
}
|
||||||
if (rid_) {
|
if (rid_) {
|
||||||
*rid_ = rid__;
|
*rid_ = rid__;
|
||||||
}
|
}
|
||||||
|
if (tag_) {
|
||||||
|
*tag_ = tag__;
|
||||||
|
}
|
||||||
if (weight_) {
|
if (weight_) {
|
||||||
*weight_ = weight__;
|
*weight_ = weight__;
|
||||||
}
|
}
|
||||||
@@ -2958,10 +2957,10 @@ static lfs_ssize_t lfsr_btree_find_(lfs_t *lfs,
|
|||||||
|
|
||||||
static lfs_ssize_t lfsr_btree_find(lfs_t *lfs,
|
static lfs_ssize_t lfsr_btree_find(lfs_t *lfs,
|
||||||
const lfsr_btree_t *btree, const char *name, lfs_size_t name_len,
|
const lfsr_btree_t *btree, const char *name, lfs_size_t name_len,
|
||||||
lfsr_tag_t *tag_, lfs_size_t *id_, lfs_size_t *weight_,
|
lfs_size_t *id_, lfsr_tag_t *tag_, lfs_size_t *weight_,
|
||||||
void *buffer, lfs_size_t size) {
|
void *buffer, lfs_size_t size) {
|
||||||
return lfsr_btree_find_(lfs, btree, name, name_len,
|
return lfsr_btree_find_(lfs, btree, name, name_len,
|
||||||
tag_, id_, NULL, NULL, weight_,
|
id_, NULL, NULL, tag_, weight_,
|
||||||
buffer, size);
|
buffer, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3022,15 +3021,15 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// end up removing an rbyd here
|
// end up removing an rbyd here
|
||||||
if (rbyd->weight == 0) {
|
if (rbyd->weight == 0) {
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
MKUNR, rid, +rbyd->weight-rweight, scratch_buf1, delta);
|
rid, MKUNR, +rbyd->weight-rweight, scratch_buf1, delta);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
attr_count = 1;
|
attr_count = 1;
|
||||||
} else {
|
} else {
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
BRANCH, rid, 0, scratch_buf1, delta);
|
rid, BRANCH, 0, scratch_buf1, delta);
|
||||||
scratch_attrs[1] = LFSR_ATTR(
|
scratch_attrs[1] = LFSR_ATTR(
|
||||||
UNR, rid, +rbyd->weight-rweight, NULL, 0);
|
rid, UNR, +rbyd->weight-rweight, NULL, 0);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
attr_count = 2;
|
attr_count = 2;
|
||||||
@@ -3056,8 +3055,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
while (true) {
|
while (true) {
|
||||||
lfs_off_t off;
|
lfs_off_t off;
|
||||||
lfs_size_t size;
|
lfs_size_t size;
|
||||||
err = lfsr_rbyd_lookup(lfs, rbyd, lfsr_tag_next(tag), id,
|
err = lfsr_rbyd_lookup(lfs, rbyd, id, lfsr_tag_next(tag),
|
||||||
&tag, &id, NULL, &off, &size);
|
&id, &tag, NULL, &off, &size);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3084,8 +3083,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
|
|
||||||
// append the attr
|
// append the attr
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
lfsr_tag_setmk(tag),
|
id-lfs_smax32(weight-1, 0),
|
||||||
id-lfs_smax32(weight-1, 0), +weight,
|
lfsr_tag_setmk(tag), +weight,
|
||||||
LFSR_DATA_DISK(rbyd->block, off, size));
|
LFSR_DATA_DISK(rbyd->block, off, size));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3102,7 +3101,7 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// layers to make sure these always fit
|
// layers to make sure these always fit
|
||||||
for (lfs_size_t i = 0; i < attr_count; i++) {
|
for (lfs_size_t i = 0; i < attr_count; i++) {
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
attrs[i].tag, attrs[i].id, attrs[i].delta, attrs[i].data);
|
attrs[i].id, attrs[i].tag, attrs[i].delta, attrs[i].data);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3143,15 +3142,15 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// end up removing an rbyd here
|
// end up removing an rbyd here
|
||||||
if (rbyd_.weight == 0) {
|
if (rbyd_.weight == 0) {
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
MKUNR, rid, +rbyd_.weight-rweight, scratch_buf1, delta);
|
rid, MKUNR, +rbyd_.weight-rweight, scratch_buf1, delta);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
attr_count = 1;
|
attr_count = 1;
|
||||||
} else {
|
} else {
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
BRANCH, rid, 0, scratch_buf1, delta);
|
rid, BRANCH, 0, scratch_buf1, delta);
|
||||||
scratch_attrs[1] = LFSR_ATTR(
|
scratch_attrs[1] = LFSR_ATTR(
|
||||||
UNR, rid, +rbyd_.weight-rweight, NULL, 0);
|
rid, UNR, +rbyd_.weight-rweight, NULL, 0);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
attr_count = 2;
|
attr_count = 2;
|
||||||
@@ -3173,7 +3172,7 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// add an rbyd and btree test?
|
// add an rbyd and btree test?
|
||||||
if ((lfs_size_t)bisect < rbyd_.weight) {
|
if ((lfs_size_t)bisect < rbyd_.weight) {
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
LFSR_TAG_MKUNR, rbyd_.weight-1, -(rbyd_.weight-bisect),
|
rbyd_.weight-1, LFSR_TAG_MKUNR, -(rbyd_.weight-bisect),
|
||||||
LFSR_DATA_NULL);
|
LFSR_DATA_NULL);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3188,7 +3187,7 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
for (lfs_size_t i = 0; i < attr_count; i++) {
|
for (lfs_size_t i = 0; i < attr_count; i++) {
|
||||||
if (attrs[i].id < bisect_) {
|
if (attrs[i].id < bisect_) {
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
attrs[i].tag, attrs[i].id, attrs[i].delta,
|
attrs[i].id, attrs[i].tag, attrs[i].delta,
|
||||||
attrs[i].data);
|
attrs[i].data);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3223,8 +3222,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
lfs_off_t off;
|
lfs_off_t off;
|
||||||
lfs_size_t size;
|
lfs_size_t size;
|
||||||
lfs_size_t weight;
|
lfs_size_t weight;
|
||||||
err = lfsr_rbyd_lookup(lfs, rbyd, lfsr_tag_next(tag), id,
|
err = lfsr_rbyd_lookup(lfs, rbyd, id, lfsr_tag_next(tag),
|
||||||
&tag, &id, &weight, &off, &size);
|
&id, &tag, &weight, &off, &size);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3234,8 +3233,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
|
|
||||||
// append the attr
|
// append the attr
|
||||||
err = lfsr_rbyd_append(lfs, &sibling,
|
err = lfsr_rbyd_append(lfs, &sibling,
|
||||||
lfsr_tag_setmk(tag),
|
id-bisect-lfs_smax32(weight-1, 0),
|
||||||
id-bisect-lfs_smax32(weight-1, 0), +weight,
|
lfsr_tag_setmk(tag), +weight,
|
||||||
LFSR_DATA_DISK(rbyd->block, off, size));
|
LFSR_DATA_DISK(rbyd->block, off, size));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3249,7 +3248,7 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
for (lfs_size_t i = 0; i < attr_count; i++) {
|
for (lfs_size_t i = 0; i < attr_count; i++) {
|
||||||
if (attrs[i].id >= bisect_) {
|
if (attrs[i].id >= bisect_) {
|
||||||
err = lfsr_rbyd_append(lfs, &sibling,
|
err = lfsr_rbyd_append(lfs, &sibling,
|
||||||
attrs[i].tag, attrs[i].id-bisect_, attrs[i].delta,
|
attrs[i].id-bisect_, attrs[i].tag, attrs[i].delta,
|
||||||
attrs[i].data);
|
attrs[i].data);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3276,8 +3275,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
lfs_ssize_t sid;
|
lfs_ssize_t sid;
|
||||||
lfs_off_t soff;
|
lfs_off_t soff;
|
||||||
lfs_size_t ssize;
|
lfs_size_t ssize;
|
||||||
err = lfsr_rbyd_lookup(lfs, &sibling, LFSR_TAG_NAME, 0,
|
err = lfsr_rbyd_lookup(lfs, &sibling, 0, LFSR_TAG_NAME,
|
||||||
&stag, &sid, NULL, &soff, &ssize);
|
&sid, &stag, NULL, &soff, &ssize);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3307,21 +3306,21 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
MKBRANCH, 0, +rbyd_.weight, scratch_buf1, delta1);
|
0, MKBRANCH, +rbyd_.weight, scratch_buf1, delta1);
|
||||||
|
|
||||||
if (lfsr_tag_suptype(stag) == LFSR_TAG_NAME) {
|
if (lfsr_tag_suptype(stag) == LFSR_TAG_NAME) {
|
||||||
scratch_attrs[1] = LFSR_ATTR_DISK(
|
scratch_attrs[1] = LFSR_ATTR_DISK(
|
||||||
MKBNAME, rbyd_.weight, +sibling.weight,
|
rbyd_.weight, MKBNAME, +sibling.weight,
|
||||||
sibling.block, soff, ssize);
|
sibling.block, soff, ssize);
|
||||||
scratch_attrs[2] = LFSR_ATTR(
|
scratch_attrs[2] = LFSR_ATTR(
|
||||||
BRANCH, 0+rbyd_.weight+sibling.weight-1, 0,
|
0+rbyd_.weight+sibling.weight-1, BRANCH, 0,
|
||||||
scratch_buf2, delta2);
|
scratch_buf2, delta2);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
attr_count = 3;
|
attr_count = 3;
|
||||||
} else {
|
} else {
|
||||||
scratch_attrs[1] = LFSR_ATTR(
|
scratch_attrs[1] = LFSR_ATTR(
|
||||||
MKBRANCH, 0+rbyd_.weight, +sibling.weight,
|
0+rbyd_.weight, MKBRANCH, +sibling.weight,
|
||||||
scratch_buf2, delta2);
|
scratch_buf2, delta2);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
@@ -3347,18 +3346,18 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
UNR, rid, +rbyd_.weight-rweight, NULL, 0);
|
rid, UNR, +rbyd_.weight-rweight, NULL, 0);
|
||||||
scratch_attrs[1] = LFSR_ATTR(
|
scratch_attrs[1] = LFSR_ATTR(
|
||||||
BRANCH, rid-(rweight-1)+rbyd_.weight-1, 0,
|
rid-(rweight-1)+rbyd_.weight-1, BRANCH, 0,
|
||||||
scratch_buf1, delta1);
|
scratch_buf1, delta1);
|
||||||
|
|
||||||
if (lfsr_tag_suptype(stag) == LFSR_TAG_NAME) {
|
if (lfsr_tag_suptype(stag) == LFSR_TAG_NAME) {
|
||||||
scratch_attrs[2] = LFSR_ATTR_DISK(
|
scratch_attrs[2] = LFSR_ATTR_DISK(
|
||||||
MKBNAME, rid-(rweight-1)+rbyd_.weight,
|
rid-(rweight-1)+rbyd_.weight, MKBNAME,
|
||||||
+sibling.weight,
|
+sibling.weight,
|
||||||
sibling.block, soff, ssize);
|
sibling.block, soff, ssize);
|
||||||
scratch_attrs[3] = LFSR_ATTR(
|
scratch_attrs[3] = LFSR_ATTR(
|
||||||
BRANCH, rid-(rweight-1)+rbyd_.weight+sibling.weight-1,
|
rid-(rweight-1)+rbyd_.weight+sibling.weight-1, BRANCH,
|
||||||
0,
|
0,
|
||||||
scratch_buf2, delta2);
|
scratch_buf2, delta2);
|
||||||
|
|
||||||
@@ -3366,7 +3365,7 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
attr_count = 4;
|
attr_count = 4;
|
||||||
} else {
|
} else {
|
||||||
scratch_attrs[2] = LFSR_ATTR(
|
scratch_attrs[2] = LFSR_ATTR(
|
||||||
MKBRANCH, rid-(rweight-1)+rbyd_.weight,
|
rid-(rweight-1)+rbyd_.weight, MKBRANCH,
|
||||||
+sibling.weight,
|
+sibling.weight,
|
||||||
scratch_buf2, delta2);
|
scratch_buf2, delta2);
|
||||||
|
|
||||||
@@ -3393,8 +3392,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
|
|
||||||
// try looking up the sibling
|
// try looking up the sibling
|
||||||
lfs_size_t sweight;
|
lfs_size_t sweight;
|
||||||
err = lfsr_rbyd_lookup(lfs, &parent, LFSR_TAG_NAME, sid,
|
err = lfsr_rbyd_lookup(lfs, &parent, sid, LFSR_TAG_NAME,
|
||||||
NULL, &sid, &sweight, NULL, NULL);
|
&sid, NULL, &sweight, NULL, NULL);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3407,8 +3406,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// lfsr_tag_t stag;
|
// lfsr_tag_t stag;
|
||||||
lfs_off_t off;
|
lfs_off_t off;
|
||||||
lfs_size_t size;
|
lfs_size_t size;
|
||||||
err = lfsr_rbyd_lookup(lfs, &parent, LFSR_TAG_BRANCH, sid,
|
err = lfsr_rbyd_lookup(lfs, &parent, sid, LFSR_TAG_BRANCH,
|
||||||
&stag, NULL, NULL, &off, &size);
|
NULL, &stag, NULL, &off, &size);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3444,8 +3443,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
id = 0;
|
id = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
lfs_size_t weight;
|
lfs_size_t weight;
|
||||||
err = lfsr_rbyd_lookup(lfs, &sibling, lfsr_tag_next(tag), id,
|
err = lfsr_rbyd_lookup(lfs, &sibling, id, lfsr_tag_next(tag),
|
||||||
&tag, &id, &weight, &off, &size);
|
&id, &tag, &weight, &off, &size);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3455,8 +3454,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
|
|
||||||
// append the attr
|
// append the attr
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
lfsr_tag_setmk(tag),
|
sdelta+id-lfs_smax32(weight-1, 0),
|
||||||
sdelta+id-lfs_smax32(weight-1, 0), +weight,
|
lfsr_tag_setmk(tag), +weight,
|
||||||
LFSR_DATA_DISK(sibling.block, off, size));
|
LFSR_DATA_DISK(sibling.block, off, size));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3466,8 +3465,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// failed, clean up ids and merge_abort
|
// failed, clean up ids and merge_abort
|
||||||
if (rbyd_.off > lfs->cfg->block_size/2) {
|
if (rbyd_.off > lfs->cfg->block_size/2) {
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
LFSR_TAG_MKUNR, sdelta+(rbyd_.weight-rweight_)-1,
|
sdelta+(rbyd_.weight-rweight_)-1,
|
||||||
-(rbyd_.weight-rweight_),
|
LFSR_TAG_MKUNR, -(rbyd_.weight-rweight_),
|
||||||
LFSR_DATA_NULL);
|
LFSR_DATA_NULL);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3482,8 +3481,8 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
lfs_off_t split_off;
|
lfs_off_t split_off;
|
||||||
lfs_size_t split_size;
|
lfs_size_t split_size;
|
||||||
err = lfsr_rbyd_lookup(lfs, &parent,
|
err = lfsr_rbyd_lookup(lfs, &parent,
|
||||||
LFSR_TAG_NAME, (sdelta == 0 ? rid : sid),
|
(sdelta == 0 ? rid : sid), LFSR_TAG_NAME,
|
||||||
&split_tag, NULL, NULL, &split_off, &split_size);
|
NULL, &split_tag, NULL, &split_off, &split_size);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3493,14 +3492,14 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
// lookup the id of the previously-split entry
|
// lookup the id of the previously-split entry
|
||||||
lfs_ssize_t split_id;
|
lfs_ssize_t split_id;
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd_,
|
err = lfsr_rbyd_lookup(lfs, &rbyd_,
|
||||||
LFSR_TAG_NAME, (sdelta == 0 ? sweight : rweight_),
|
(sdelta == 0 ? sweight : rweight_), LFSR_TAG_NAME,
|
||||||
NULL, &split_id, NULL, NULL, NULL);
|
&split_id, NULL, NULL, NULL, NULL);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = lfsr_rbyd_append(lfs, &rbyd_,
|
err = lfsr_rbyd_append(lfs, &rbyd_,
|
||||||
LFSR_TAG_BNAME, split_id, 0,
|
split_id, LFSR_TAG_BNAME, 0,
|
||||||
LFSR_DATA_DISK(parent.block, split_off, split_size));
|
LFSR_DATA_DISK(parent.block, split_off, split_size));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3539,11 +3538,11 @@ static int lfsr_btree_commit(lfs_t *lfs,
|
|||||||
}
|
}
|
||||||
|
|
||||||
scratch_attrs[0] = LFSR_ATTR(
|
scratch_attrs[0] = LFSR_ATTR(
|
||||||
MKUNR, sid, -sweight, NULL, 0);
|
sid, MKUNR, -sweight, NULL, 0);
|
||||||
scratch_attrs[1] = LFSR_ATTR(
|
scratch_attrs[1] = LFSR_ATTR(
|
||||||
BRANCH, rid, 0, scratch_buf1, delta1);
|
rid, BRANCH, 0, scratch_buf1, delta1);
|
||||||
scratch_attrs[2] = LFSR_ATTR(
|
scratch_attrs[2] = LFSR_ATTR(
|
||||||
UNR, rid, +rbyd_.weight-rweight, NULL, 0);
|
rid, UNR, +rbyd_.weight-rweight, NULL, 0);
|
||||||
|
|
||||||
attrs = scratch_attrs;
|
attrs = scratch_attrs;
|
||||||
attr_count = 3;
|
attr_count = 3;
|
||||||
@@ -3588,10 +3587,10 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
// commit our entries
|
// commit our entries
|
||||||
err = lfsr_rbyd_commit(lfs, &rbyd, LFSR_ATTRS(
|
err = lfsr_rbyd_commit(lfs, &rbyd, LFSR_ATTRS(
|
||||||
LFSR_ATTR_(
|
LFSR_ATTR_(
|
||||||
lfsr_tag_setmk(btree->tag), 0, +btree->weight,
|
0, lfsr_tag_setmk(btree->tag), +btree->weight,
|
||||||
btree->u.inlined.buf, btree->u.inlined.size),
|
btree->u.inlined.buf, btree->u.inlined.size),
|
||||||
LFSR_ATTR_(
|
LFSR_ATTR_(
|
||||||
lfsr_tag_setmk(tag), id, +weight,
|
id, lfsr_tag_setmk(tag), +weight,
|
||||||
buffer, size)));
|
buffer, size)));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3611,7 +3610,7 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
lfs_size_t rweight;
|
lfs_size_t rweight;
|
||||||
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree,
|
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree,
|
||||||
lfs_min32(id, btree->weight-1),
|
lfs_min32(id, btree->weight-1),
|
||||||
NULL, NULL, &rbyd, &rid, &rweight, NULL, 0);
|
NULL, &rbyd, &rid, NULL, &rweight, NULL, 0);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -3627,7 +3626,7 @@ static int lfsr_btree_push(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
// of the rest
|
// of the rest
|
||||||
return lfsr_btree_commit(lfs, btree,
|
return lfsr_btree_commit(lfs, btree,
|
||||||
lfs_min32(id, btree->weight-1), &rbyd, LFSR_ATTRS(
|
lfs_min32(id, btree->weight-1), &rbyd, LFSR_ATTRS(
|
||||||
LFSR_ATTR_(lfsr_tag_setmk(tag), rid, +weight,
|
LFSR_ATTR_(rid, lfsr_tag_setmk(tag), +weight,
|
||||||
buffer, size)));
|
buffer, size)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3657,7 +3656,7 @@ static int lfsr_btree_update(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
lfs_ssize_t rid;
|
lfs_ssize_t rid;
|
||||||
lfs_size_t rweight;
|
lfs_size_t rweight;
|
||||||
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree, id,
|
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree, id,
|
||||||
&rtag, NULL, &rbyd, &rid, &rweight, NULL, 0);
|
NULL, &rbyd, &rid, &rtag, &rweight, NULL, 0);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -3666,10 +3665,10 @@ static int lfsr_btree_update(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
// of the rest
|
// of the rest
|
||||||
return lfsr_btree_commit(lfs, btree, id, &rbyd, LFSR_ATTRS(
|
return lfsr_btree_commit(lfs, btree, id, &rbyd, LFSR_ATTRS(
|
||||||
(tag != rtag
|
(tag != rtag
|
||||||
? LFSR_ATTR_(lfsr_tag_setrm(rtag), rid, 0, NULL, 0)
|
? LFSR_ATTR_(rid, lfsr_tag_setrm(rtag), 0, NULL, 0)
|
||||||
: LFSR_ATTR_NOOP),
|
: LFSR_ATTR_NOOP),
|
||||||
LFSR_ATTR_(tag, rid, 0, buffer, size),
|
LFSR_ATTR_(rid, tag, 0, buffer, size),
|
||||||
LFSR_ATTR(UNR, rid, +weight-rweight, NULL, 0)));
|
LFSR_ATTR(rid, UNR, +weight-rweight, NULL, 0)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3690,7 +3689,7 @@ static int lfsr_btree_pop(lfs_t *lfs, lfsr_btree_t *btree, lfs_size_t id) {
|
|||||||
lfs_ssize_t rid;
|
lfs_ssize_t rid;
|
||||||
lfs_size_t rweight;
|
lfs_size_t rweight;
|
||||||
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree, id,
|
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree, id,
|
||||||
&rtag, NULL, &rbyd, &rid, &rweight, NULL, 0);
|
NULL, &rbyd, &rid, &rtag, &rweight, NULL, 0);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -3709,8 +3708,8 @@ static int lfsr_btree_pop(lfs_t *lfs, lfsr_btree_t *btree, lfs_size_t id) {
|
|||||||
|
|
||||||
// try looking up the sibling
|
// try looking up the sibling
|
||||||
lfs_size_t sweight;
|
lfs_size_t sweight;
|
||||||
int err = lfsr_rbyd_lookup(lfs, &rbyd, LFSR_TAG_NAME, sid,
|
int err = lfsr_rbyd_lookup(lfs, &rbyd, sid, LFSR_TAG_NAME,
|
||||||
NULL, &sid, &sweight, NULL, NULL);
|
&sid, NULL, &sweight, NULL, NULL);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3724,8 +3723,8 @@ static int lfsr_btree_pop(lfs_t *lfs, lfsr_btree_t *btree, lfs_size_t id) {
|
|||||||
lfsr_tag_t stag;
|
lfsr_tag_t stag;
|
||||||
lfs_off_t off;
|
lfs_off_t off;
|
||||||
lfs_size_t size;
|
lfs_size_t size;
|
||||||
err = lfsr_rbyd_lookup(lfs, &rbyd, LFSR_TAG_STRUCT, sid,
|
err = lfsr_rbyd_lookup(lfs, &rbyd, sid, LFSR_TAG_STRUCT,
|
||||||
&stag, NULL, NULL, &off, &size);
|
NULL, &stag, NULL, &off, &size);
|
||||||
if (err && err != LFS_ERR_NOENT) {
|
if (err && err != LFS_ERR_NOENT) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -3756,7 +3755,7 @@ static int lfsr_btree_pop(lfs_t *lfs, lfsr_btree_t *btree, lfs_size_t id) {
|
|||||||
// remove our id, letting lfsr_btree_commit take care
|
// remove our id, letting lfsr_btree_commit take care
|
||||||
// of the rest
|
// of the rest
|
||||||
return lfsr_btree_commit(lfs, btree, id, &rbyd, LFSR_ATTRS(
|
return lfsr_btree_commit(lfs, btree, id, &rbyd, LFSR_ATTRS(
|
||||||
LFSR_ATTR(MKUNR, rid, -rweight, NULL, 0)));
|
LFSR_ATTR(rid, MKUNR, -rweight, NULL, 0)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3785,11 +3784,11 @@ static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
|
|
||||||
// commit our entries
|
// commit our entries
|
||||||
err = lfsr_rbyd_commit(lfs, &rbyd, LFSR_ATTRS(
|
err = lfsr_rbyd_commit(lfs, &rbyd, LFSR_ATTRS(
|
||||||
LFSR_ATTR_(lfsr_tag_setmk(tag1), 0, +weight1,
|
LFSR_ATTR_(0, lfsr_tag_setmk(tag1), +weight1,
|
||||||
buffer1, size1),
|
buffer1, size1),
|
||||||
LFSR_ATTR(MKBNAME, weight1, +weight2,
|
LFSR_ATTR(weight1, MKBNAME, +weight2,
|
||||||
name, name_len),
|
name, name_len),
|
||||||
LFSR_ATTR_(tag2, weight1+weight2-1, 0,
|
LFSR_ATTR_(weight1+weight2-1, tag2, 0,
|
||||||
buffer2, size2)));
|
buffer2, size2)));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
@@ -3811,7 +3810,7 @@ static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
// // TODO should we bother with id splits if we usually split on names?
|
// // TODO should we bother with id splits if we usually split on names?
|
||||||
// if (name_len == 0) {
|
// if (name_len == 0) {
|
||||||
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree, id,
|
lfs_ssize_t size = lfsr_btree_lookup(lfs, btree, id,
|
||||||
NULL, NULL, &rbyd, &rid, &rweight, NULL, 0);
|
NULL, &rbyd, &rid, NULL, &rweight, NULL, 0);
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -3826,13 +3825,13 @@ static int lfsr_btree_split(lfs_t *lfs, lfsr_btree_t *btree,
|
|||||||
// commit our id into the tree, letting lfsr_btree_commit take care
|
// commit our id into the tree, letting lfsr_btree_commit take care
|
||||||
// of the rest
|
// of the rest
|
||||||
return lfsr_btree_commit(lfs, btree, id, &rbyd, LFSR_ATTRS(
|
return lfsr_btree_commit(lfs, btree, id, &rbyd, LFSR_ATTRS(
|
||||||
LFSR_ATTR(UNR, rid, +weight1-rweight, NULL, 0),
|
LFSR_ATTR(rid, UNR, +weight1-rweight, NULL, 0),
|
||||||
LFSR_ATTR_(tag1, rid-(rweight-1)+weight1-1, 0,
|
LFSR_ATTR_(rid-(rweight-1)+weight1-1, tag1, 0,
|
||||||
buffer1, size1),
|
buffer1, size1),
|
||||||
// TODO should we always be making name entries?
|
// TODO should we always be making name entries?
|
||||||
LFSR_ATTR(MKBNAME, rid-(rweight-1)+weight1, +weight2,
|
LFSR_ATTR(rid-(rweight-1)+weight1, MKBNAME, +weight2,
|
||||||
name, name_len),
|
name, name_len),
|
||||||
LFSR_ATTR_(tag2, rid-(rweight-1)+weight1+weight2-1, 0,
|
LFSR_ATTR_(rid-(rweight-1)+weight1+weight2-1, tag2, 0,
|
||||||
buffer2, size2)));
|
buffer2, size2)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-9
@@ -199,7 +199,7 @@ class Rbyd:
|
|||||||
|
|
||||||
return Rbyd(block, limit, data, rev, off, trunk, weight)
|
return Rbyd(block, limit, data, rev, off, trunk, weight)
|
||||||
|
|
||||||
def lookup(self, tag, id):
|
def lookup(self, id, tag):
|
||||||
if not self:
|
if not self:
|
||||||
return True, 0, -1, 0, 0, 0, b''
|
return True, 0, -1, 0, 0, 0, b''
|
||||||
|
|
||||||
@@ -227,13 +227,13 @@ class Rbyd:
|
|||||||
j = j + delta
|
j = j + delta
|
||||||
# found tag
|
# found tag
|
||||||
else:
|
else:
|
||||||
tag_ = alt
|
|
||||||
id_ = upper-1
|
id_ = upper-1
|
||||||
|
tag_ = alt
|
||||||
w_ = id_-lower
|
w_ = id_-lower
|
||||||
|
|
||||||
done = (id_, tag_) < (id, tag) or tag_ & 2
|
done = (id_, tag_) < (id, tag) or tag_ & 2
|
||||||
|
|
||||||
return (done, tag_, id_, w_,
|
return (done, id_, tag_, w_,
|
||||||
j, delta, self.data[j+delta:j+delta+jump])
|
j, delta, self.data[j+delta:j+delta+jump])
|
||||||
|
|
||||||
def __bool__(self):
|
def __bool__(self):
|
||||||
@@ -250,11 +250,11 @@ class Rbyd:
|
|||||||
id = 0
|
id = 0
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
done, tag, id, w, j, d, data = self.lookup(tag+0x10, id)
|
done, id, tag, w, j, d, data = self.lookup(id, tag+0x10)
|
||||||
if done:
|
if done:
|
||||||
break
|
break
|
||||||
|
|
||||||
yield tag, id, w, j, d, data
|
yield id, tag, w, j, d, data
|
||||||
|
|
||||||
|
|
||||||
def main(disk, block_size=None, trunk=0, limit=None, *,
|
def main(disk, block_size=None, trunk=0, limit=None, *,
|
||||||
@@ -306,8 +306,8 @@ def main(disk, block_size=None, trunk=0, limit=None, *,
|
|||||||
|
|
||||||
while True:
|
while True:
|
||||||
# first lookup id/name
|
# first lookup id/name
|
||||||
(done, name_tag, rid_, w,
|
(done, rid_, name_tag, w,
|
||||||
name_j, name_d, name) = rbyd.lookup(0, rid)
|
name_j, name_d, name) = rbyd.lookup(rid, 0)
|
||||||
if done:
|
if done:
|
||||||
return (True, id, 0, rbyd, -1,
|
return (True, id, 0, rbyd, -1,
|
||||||
(0, 0, 0, b''),
|
(0, 0, 0, b''),
|
||||||
@@ -316,9 +316,9 @@ def main(disk, block_size=None, trunk=0, limit=None, *,
|
|||||||
|
|
||||||
if name_tag & 0xf00f == TAG_NAME:
|
if name_tag & 0xf00f == TAG_NAME:
|
||||||
# then lookup struct
|
# then lookup struct
|
||||||
(done, struct_tag, _, _,
|
(done, _, struct_tag, _,
|
||||||
struct_j, struct_d, struct_) = rbyd.lookup(
|
struct_j, struct_d, struct_) = rbyd.lookup(
|
||||||
TAG_STRUCT, rid_)
|
rid_, TAG_STRUCT)
|
||||||
if done:
|
if done:
|
||||||
return (True, id, 0, rbyd, -1,
|
return (True, id, 0, rbyd, -1,
|
||||||
(0, 0, 0, b''),
|
(0, 0, 0, b''),
|
||||||
|
|||||||
+7
-7
@@ -493,7 +493,7 @@ def show_tree(block_size, data, rev, trunk, weight, *,
|
|||||||
|
|
||||||
# lookup a tag, returning also the search path for decoration
|
# lookup a tag, returning also the search path for decoration
|
||||||
# purposes
|
# purposes
|
||||||
def lookup(tag, id):
|
def lookup(id, tag):
|
||||||
lower = -1
|
lower = -1
|
||||||
upper = weight
|
upper = weight
|
||||||
path = []
|
path = []
|
||||||
@@ -541,13 +541,13 @@ def show_tree(block_size, data, rev, trunk, weight, *,
|
|||||||
path.append((j-delta, j, False, 'b'))
|
path.append((j-delta, j, False, 'b'))
|
||||||
# found tag
|
# found tag
|
||||||
else:
|
else:
|
||||||
tag_ = alt
|
|
||||||
id_ = upper-1
|
id_ = upper-1
|
||||||
|
tag_ = alt
|
||||||
w_ = id_-lower
|
w_ = id_-lower
|
||||||
|
|
||||||
done = (id_, tag_) < (id, tag) or tag_ & 2
|
done = (id_, tag_) < (id, tag) or tag_ & 2
|
||||||
|
|
||||||
return done, tag_, id_, w_, j, delta, jump, path
|
return done, id_, tag_, w_, j, delta, jump, path
|
||||||
|
|
||||||
# precompute tree
|
# precompute tree
|
||||||
tree_width = 0
|
tree_width = 0
|
||||||
@@ -555,9 +555,9 @@ def show_tree(block_size, data, rev, trunk, weight, *,
|
|||||||
trunks = co.defaultdict(lambda: (-1, 0))
|
trunks = co.defaultdict(lambda: (-1, 0))
|
||||||
alts = co.defaultdict(lambda: {})
|
alts = co.defaultdict(lambda: {})
|
||||||
|
|
||||||
tag, id = 0, -1
|
id, tag = -1, 0
|
||||||
while True:
|
while True:
|
||||||
done, tag, id, w, j, delta, size, path = lookup(tag+0x10, id)
|
done, id, tag, w, j, delta, size, path = lookup(id, tag+0x10)
|
||||||
# found end of tree?
|
# found end of tree?
|
||||||
if done:
|
if done:
|
||||||
break
|
break
|
||||||
@@ -690,9 +690,9 @@ def show_tree(block_size, data, rev, trunk, weight, *,
|
|||||||
'data (truncated)'
|
'data (truncated)'
|
||||||
if not args.get('no_truncate') else ''))
|
if not args.get('no_truncate') else ''))
|
||||||
|
|
||||||
tag, id = 0, -1
|
id, tag = -1, 0
|
||||||
while True:
|
while True:
|
||||||
done, tag, id, w, j, delta, size, path = lookup(tag+0x10, id)
|
done, id, tag, w, j, delta, size, path = lookup(id, tag+0x10)
|
||||||
# found end of tree?
|
# found end of tree?
|
||||||
if done:
|
if done:
|
||||||
break
|
break
|
||||||
|
|||||||
+133
-133
File diff suppressed because it is too large
Load Diff
+2245
-2245
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user