Skip to content

Commit fb23044

Browse files
committed
Fixed big-endian support for entry structures
1 parent 9273ac7 commit fb23044

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

lfs.c

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,10 @@ static void lfs_entry_fromle32(struct lfs_disk_entry *d) {
349349
d->u.dir[1] = lfs_fromle32(d->u.dir[1]);
350350
}
351351

352-
// TODO
353-
//static void lfs_entry_tole32(struct lfs_disk_entry *d) {
354-
// d->u.dir[0] = lfs_tole32(d->u.dir[0]);
355-
// d->u.dir[1] = lfs_tole32(d->u.dir[1]);
356-
//}
352+
static void lfs_entry_tole32(struct lfs_disk_entry *d) {
353+
d->u.dir[0] = lfs_tole32(d->u.dir[0]);
354+
d->u.dir[1] = lfs_tole32(d->u.dir[1]);
355+
}
357356

358357
static void lfs_superblock_fromle32(struct lfs_disk_superblock *d) {
359358
d->root[0] = lfs_fromle32(d->root[0]);
@@ -683,7 +682,10 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
683682
r->off += entry->off;
684683
}
685684

686-
return lfs_dir_commit(lfs, dir, regions);
685+
lfs_entry_tole32(&entry->d);
686+
int err = lfs_dir_commit(lfs, dir, regions);
687+
lfs_entry_fromle32(&entry->d);
688+
return err;
687689
}
688690

689691
// we need to allocate a new dir block
@@ -701,7 +703,9 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
701703
r->off += entry->off;
702704
}
703705

706+
lfs_entry_tole32(&entry->d);
704707
err = lfs_dir_commit(lfs, dir, regions);
708+
lfs_entry_fromle32(&entry->d);
705709
if (err) {
706710
return err;
707711
}
@@ -783,7 +787,9 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
783787
r->off += entry->off;
784788
}
785789

790+
lfs_entry_tole32(&entry->d);
786791
int err = lfs_dir_commit(lfs, dir, regions);
792+
lfs_entry_fromle32(&entry->d);
787793
if (err) {
788794
return err;
789795
}
@@ -807,32 +813,35 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
807813
}
808814
} else {
809815
lfs_dir_t olddir = *dir;
810-
lfs_off_t oldoff = entry->off;
811-
lfs_size_t oldsize = entry->size - diff;
816+
lfs_entry_t oldentry = {
817+
.off = entry->off,
818+
.size = entry->size - diff,
819+
.d.type = entry->d.type | LFS_STRUCT_MOVED,
820+
};
812821

813822
// mark as moving
814-
entry->d.type |= LFS_STRUCT_MOVED;
815823
int err = lfs_dir_commit(lfs, &olddir,
816824
&(struct lfs_region){
817-
oldoff, 0,
818-
lfs_commit_mem, &entry->d.type, 1});
825+
oldentry.off, 0,
826+
lfs_commit_mem, &oldentry.d.type, 1});
819827
if (err) {
820828
return err;
821829
}
822-
entry->d.type &= LFS_STRUCT_MOVED;
823830

824831
// append updated entry
832+
lfs_entry_tole32(&entry->d);
825833
err = lfs_dir_append(lfs, dir, entry,
826834
&(struct lfs_region){
827835
0, +entry->size,
828836
lfs_commit_disk, &(struct lfs_commit_disk){
829-
olddir.pair[0], entry->off, regions}, oldsize});
837+
olddir.pair[0], entry->off, regions}, oldentry.size});
838+
lfs_entry_fromle32(&entry->d);
830839
if (err) {
831840
return err;
832841
}
833842

834843
// remove old entry
835-
err = lfs_dir_remove(lfs, dir, &(lfs_entry_t){oldoff, oldsize});
844+
err = lfs_dir_remove(lfs, dir, &oldentry);
836845
if (err) {
837846
return err;
838847
}
@@ -1645,10 +1654,12 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
16451654
entry.d.u.file.head = file->head;
16461655
entry.d.u.file.size = file->size;
16471656

1657+
lfs_entry_tole32(&entry.d);
16481658
err = lfs_dir_update(lfs, &cwd, &entry,
16491659
&(struct lfs_region){
16501660
0, 0,
16511661
lfs_commit_mem, &entry.d, sizeof(entry.d)});
1662+
lfs_entry_fromle32(&entry.d);
16521663
if (err) {
16531664
return err;
16541665
}
@@ -2073,7 +2084,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
20732084
err = lfs_dir_update(lfs, &oldcwd, &oldentry,
20742085
&(struct lfs_region){
20752086
0, 0,
2076-
lfs_commit_mem, &oldentry.d, sizeof(oldentry.d)});
2087+
lfs_commit_mem, &oldentry.d.type, 1});
20772088
if (err) {
20782089
return err;
20792090
}

0 commit comments

Comments
 (0)