WIP Moved entry tag updates out

This commit is contained in:
Christopher Haster
2018-03-10 21:28:06 -06:00
parent 32f43462ea
commit 96cca2f5b6

63
lfs.c
View File

@@ -339,10 +339,11 @@ static void lfs_entry_fromle32(struct lfs_disk_entry *d) {
d->u.dir[1] = lfs_fromle32(d->u.dir[1]);
}
static void lfs_entry_tole32(struct lfs_disk_entry *d) {
d->u.dir[0] = lfs_tole32(d->u.dir[0]);
d->u.dir[1] = lfs_tole32(d->u.dir[1]);
}
// TODO
//static void lfs_entry_tole32(struct lfs_disk_entry *d) {
// d->u.dir[0] = lfs_tole32(d->u.dir[0]);
// d->u.dir[1] = lfs_tole32(d->u.dir[1]);
//}
static void lfs_superblock_fromle32(struct lfs_disk_superblock *d) {
d->root[0] = lfs_fromle32(d->root[0]);
@@ -660,13 +661,7 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
r->off += entry->off;
}
lfs_entry_tole32(&entry->d);
int err = lfs_dir_commit(lfs, dir,
&(struct lfs_region){
LFS_FROM_MEM, entry->off, +4,
{.m.data = &entry->d}, 4, regions});
lfs_entry_fromle32(&entry->d);
return err;
return lfs_dir_commit(lfs, dir, regions);
}
// we need to allocate a new dir block
@@ -684,12 +679,7 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
r->off += entry->off;
}
lfs_entry_tole32(&entry->d);
err = lfs_dir_commit(lfs, dir,
&(struct lfs_region){
LFS_FROM_MEM, entry->off, +4,
{.m.data = &entry->d}, 4, regions});
lfs_entry_fromle32(&entry->d);
err = lfs_dir_commit(lfs, dir, regions);
if (err) {
return err;
}
@@ -725,12 +715,7 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
r->off += entry->off;
}
lfs_entry_tole32(&entry->d);
int err = lfs_dir_commit(lfs, dir,
&(struct lfs_region){
LFS_FROM_MEM, entry->off, 0,
{.m.data = &entry->d}, sizeof(entry->d), regions});
lfs_entry_fromle32(&entry->d);
int err = lfs_dir_commit(lfs, dir, regions);
if (err) {
return err;
}
@@ -1041,8 +1026,8 @@ int lfs_mkdir(lfs_t *lfs, const char *path) {
err = lfs_dir_append(lfs, &cwd, &entry,
&(struct lfs_region){
LFS_FROM_MEM, 0, +(sizeof(entry.d)-4),
{.m.data = (uint8_t*)&entry.d+4}, sizeof(entry.d)-4,
LFS_FROM_MEM, 0, +sizeof(entry.d),
{.m.data = &entry.d}, sizeof(entry.d),
&(struct lfs_region){
LFS_FROM_MEM, 0, +entry.d.nlen,
{.m.data = path}, entry.d.nlen}});
@@ -1431,8 +1416,8 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
entry.d.u.file.size = 0;
err = lfs_dir_append(lfs, &cwd, &entry,
&(struct lfs_region){
LFS_FROM_MEM, 0, +(sizeof(entry.d)-4),
{.m.data = (uint8_t*)&entry.d+4}, sizeof(entry.d)-4,
LFS_FROM_MEM, 0, +sizeof(entry.d),
{.m.data = &entry.d}, sizeof(entry.d),
&(struct lfs_region){
LFS_FROM_MEM, 0, +entry.d.nlen,
{.m.data = path}, entry.d.nlen}});
@@ -1654,7 +1639,7 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
err = lfs_dir_update(lfs, &cwd, &entry,
&(struct lfs_region){
LFS_FROM_MEM, 0, 0,
{.m.data = (const uint8_t *)&entry.d+4}, sizeof(entry.d)-4});
{.m.data = &entry.d}, sizeof(entry.d)});
if (err) {
return err;
}
@@ -2076,7 +2061,10 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
// mark as moving
oldentry.d.type |= LFS_STRUCT_MOVED;
err = lfs_dir_update(lfs, &oldcwd, &oldentry, NULL);
err = lfs_dir_update(lfs, &oldcwd, &oldentry,
&(struct lfs_region){
LFS_FROM_MEM, 0, 0,
{.m.data = &oldentry.d}, sizeof(oldentry.d)});
if (err) {
return err;
}
@@ -2096,10 +2084,9 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
err = lfs_dir_update(lfs, &newcwd, &newentry,
&(struct lfs_region){
LFS_FROM_MEM, 0, 0,
{.m.data = (const uint8_t*)&newentry.d+4},
sizeof(newentry.d)-4,
{.m.data = &newentry.d}, sizeof(newentry.d),
&(struct lfs_region){
LFS_FROM_MEM, sizeof(newentry.d)-4, 0,
LFS_FROM_MEM, sizeof(newentry.d), 0,
{.m.data = newpath}, newentry.d.nlen}});
if (err) {
return err;
@@ -2107,9 +2094,8 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
} else {
err = lfs_dir_append(lfs, &newcwd, &newentry,
&(struct lfs_region){
LFS_FROM_MEM, 0, +(sizeof(newentry.d)-4),
{.m.data = (const uint8_t*)&newentry.d+4},
sizeof(newentry.d)-4,
LFS_FROM_MEM, 0, +sizeof(newentry.d),
{.m.data = &newentry.d}, sizeof(newentry.d),
&(struct lfs_region){
LFS_FROM_MEM, 0, +newentry.d.nlen,
{.m.data = newpath}, newentry.d.nlen}});
@@ -2547,7 +2533,7 @@ static int lfs_relocate(lfs_t *lfs,
int err = lfs_dir_update(lfs, &parent, &entry,
&(struct lfs_region){
LFS_FROM_MEM, 0, 0,
{.m.data = (const uint8_t*)&entry.d+4}, sizeof(entry.d)-4});
{.m.data = &entry.d}, sizeof(entry.d)});
if (err) {
return err;
}
@@ -2671,7 +2657,10 @@ int lfs_deorphan(lfs_t *lfs) {
LFS_DEBUG("Found partial move %d %d",
entry.d.u.dir[0], entry.d.u.dir[1]);
entry.d.type &= ~LFS_STRUCT_MOVED;
err = lfs_dir_update(lfs, &cwd, &entry, NULL);
err = lfs_dir_update(lfs, &cwd, &entry,
&(struct lfs_region){
LFS_FROM_MEM, 0, 0,
{.m.data = &entry.d}, sizeof(entry.d)});
if (err) {
return err;
}