mirror of
https://github.com/eledio-devices/thirdparty-littlefs.git
synced 2025-11-01 08:48:31 +01:00
Fixed big-endian support for entry structures
This commit is contained in:
41
lfs.c
41
lfs.c
@@ -349,11 +349,10 @@ static void lfs_entry_fromle32(struct lfs_disk_entry *d) {
|
|||||||
d->u.dir[1] = lfs_fromle32(d->u.dir[1]);
|
d->u.dir[1] = lfs_fromle32(d->u.dir[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
static void lfs_entry_tole32(struct lfs_disk_entry *d) {
|
||||||
//static void lfs_entry_tole32(struct lfs_disk_entry *d) {
|
d->u.dir[0] = lfs_tole32(d->u.dir[0]);
|
||||||
// d->u.dir[0] = lfs_tole32(d->u.dir[0]);
|
d->u.dir[1] = lfs_tole32(d->u.dir[1]);
|
||||||
// d->u.dir[1] = lfs_tole32(d->u.dir[1]);
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
static void lfs_superblock_fromle32(struct lfs_disk_superblock *d) {
|
static void lfs_superblock_fromle32(struct lfs_disk_superblock *d) {
|
||||||
d->root[0] = lfs_fromle32(d->root[0]);
|
d->root[0] = lfs_fromle32(d->root[0]);
|
||||||
@@ -683,7 +682,10 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
|
|||||||
r->off += entry->off;
|
r->off += entry->off;
|
||||||
}
|
}
|
||||||
|
|
||||||
return lfs_dir_commit(lfs, dir, regions);
|
lfs_entry_tole32(&entry->d);
|
||||||
|
int err = lfs_dir_commit(lfs, dir, regions);
|
||||||
|
lfs_entry_fromle32(&entry->d);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// we need to allocate a new dir block
|
// we need to allocate a new dir block
|
||||||
@@ -701,7 +703,9 @@ static int lfs_dir_append(lfs_t *lfs, lfs_dir_t *dir,
|
|||||||
r->off += entry->off;
|
r->off += entry->off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lfs_entry_tole32(&entry->d);
|
||||||
err = lfs_dir_commit(lfs, dir, regions);
|
err = lfs_dir_commit(lfs, dir, regions);
|
||||||
|
lfs_entry_fromle32(&entry->d);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -783,7 +787,9 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
|
|||||||
r->off += entry->off;
|
r->off += entry->off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lfs_entry_tole32(&entry->d);
|
||||||
int err = lfs_dir_commit(lfs, dir, regions);
|
int err = lfs_dir_commit(lfs, dir, regions);
|
||||||
|
lfs_entry_fromle32(&entry->d);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -807,32 +813,35 @@ static int lfs_dir_update(lfs_t *lfs, lfs_dir_t *dir,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
lfs_dir_t olddir = *dir;
|
lfs_dir_t olddir = *dir;
|
||||||
lfs_off_t oldoff = entry->off;
|
lfs_entry_t oldentry = {
|
||||||
lfs_size_t oldsize = entry->size - diff;
|
.off = entry->off,
|
||||||
|
.size = entry->size - diff,
|
||||||
|
.d.type = entry->d.type | LFS_STRUCT_MOVED,
|
||||||
|
};
|
||||||
|
|
||||||
// mark as moving
|
// mark as moving
|
||||||
entry->d.type |= LFS_STRUCT_MOVED;
|
|
||||||
int err = lfs_dir_commit(lfs, &olddir,
|
int err = lfs_dir_commit(lfs, &olddir,
|
||||||
&(struct lfs_region){
|
&(struct lfs_region){
|
||||||
oldoff, 0,
|
oldentry.off, 0,
|
||||||
lfs_commit_mem, &entry->d.type, 1});
|
lfs_commit_mem, &oldentry.d.type, 1});
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
entry->d.type &= LFS_STRUCT_MOVED;
|
|
||||||
|
|
||||||
// append updated entry
|
// append updated entry
|
||||||
|
lfs_entry_tole32(&entry->d);
|
||||||
err = lfs_dir_append(lfs, dir, entry,
|
err = lfs_dir_append(lfs, dir, entry,
|
||||||
&(struct lfs_region){
|
&(struct lfs_region){
|
||||||
0, +entry->size,
|
0, +entry->size,
|
||||||
lfs_commit_disk, &(struct lfs_commit_disk){
|
lfs_commit_disk, &(struct lfs_commit_disk){
|
||||||
olddir.pair[0], entry->off, regions}, oldsize});
|
olddir.pair[0], entry->off, regions}, oldentry.size});
|
||||||
|
lfs_entry_fromle32(&entry->d);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove old entry
|
// remove old entry
|
||||||
err = lfs_dir_remove(lfs, dir, &(lfs_entry_t){oldoff, oldsize});
|
err = lfs_dir_remove(lfs, dir, &oldentry);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -1645,10 +1654,12 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
|
|||||||
entry.d.u.file.head = file->head;
|
entry.d.u.file.head = file->head;
|
||||||
entry.d.u.file.size = file->size;
|
entry.d.u.file.size = file->size;
|
||||||
|
|
||||||
|
lfs_entry_tole32(&entry.d);
|
||||||
err = lfs_dir_update(lfs, &cwd, &entry,
|
err = lfs_dir_update(lfs, &cwd, &entry,
|
||||||
&(struct lfs_region){
|
&(struct lfs_region){
|
||||||
0, 0,
|
0, 0,
|
||||||
lfs_commit_mem, &entry.d, sizeof(entry.d)});
|
lfs_commit_mem, &entry.d, sizeof(entry.d)});
|
||||||
|
lfs_entry_fromle32(&entry.d);
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@@ -2073,7 +2084,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
|
|||||||
err = lfs_dir_update(lfs, &oldcwd, &oldentry,
|
err = lfs_dir_update(lfs, &oldcwd, &oldentry,
|
||||||
&(struct lfs_region){
|
&(struct lfs_region){
|
||||||
0, 0,
|
0, 0,
|
||||||
lfs_commit_mem, &oldentry.d, sizeof(oldentry.d)});
|
lfs_commit_mem, &oldentry.d.type, 1});
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user