Generated v2 prefixes
This commit is contained in:
@@ -258,7 +258,7 @@ static int lfs2_bd_prog(lfs2_t *lfs2,
|
||||
continue;
|
||||
}
|
||||
|
||||
// pcache must have been flushed, either by programming and
|
||||
// pcache must have been flushed, either by programming an
|
||||
// entire block or manually flushing the pcache
|
||||
LFS2_ASSERT(pcache->block == LFS2_BLOCK_NULL);
|
||||
|
||||
@@ -286,7 +286,7 @@ static int lfs2_bd_erase(lfs2_t *lfs2, lfs2_block_t block) {
|
||||
|
||||
// some operations on paths
|
||||
static inline lfs2_size_t lfs2_path_namelen(const char *path) {
|
||||
return strcspn(path, "/");
|
||||
return (lfs2_size_t)strcspn(path, "/");
|
||||
}
|
||||
|
||||
static inline bool lfs2_path_islast(const char *path) {
|
||||
@@ -1291,6 +1291,7 @@ static lfs2_stag_t lfs2_dir_fetchmatch(lfs2_t *lfs2,
|
||||
|
||||
// found a match for our fetcher?
|
||||
if ((fmask & tag) == (fmask & ftag)) {
|
||||
LFS2_ASSERT(cb != NULL);
|
||||
int res = cb(data, tag, &(struct lfs2_diskoff){
|
||||
dir->pair[0], off+sizeof(tag)});
|
||||
if (res < 0) {
|
||||
@@ -1501,7 +1502,7 @@ nextname:
|
||||
if (lfs2_tag_type3(tag) == LFS2_TYPE_DIR) {
|
||||
name += strspn(name, "/");
|
||||
}
|
||||
lfs2_size_t namelen = strcspn(name, "/");
|
||||
lfs2_size_t namelen = (lfs2_size_t)strcspn(name, "/");
|
||||
|
||||
// skip '.'
|
||||
if (namelen == 1 && memcmp(name, ".", 1) == 0) {
|
||||
@@ -1520,7 +1521,7 @@ nextname:
|
||||
int depth = 1;
|
||||
while (true) {
|
||||
suffix += strspn(suffix, "/");
|
||||
sufflen = strcspn(suffix, "/");
|
||||
sufflen = (lfs2_size_t)strcspn(suffix, "/");
|
||||
if (sufflen == 0) {
|
||||
break;
|
||||
}
|
||||
@@ -1761,7 +1762,7 @@ static int lfs2_dir_commitcrc(lfs2_t *lfs2, struct lfs2_commit *commit) {
|
||||
|
||||
commit->off = noff;
|
||||
// perturb valid bit?
|
||||
commit->ptag = ntag ^ ((0x80UL & ~eperturb) << 24);
|
||||
commit->ptag = ntag ^ ((lfs2_tag_t)(0x80 & ~eperturb) << 24);
|
||||
// reset crc for next commit
|
||||
commit->crc = 0xffffffff;
|
||||
|
||||
@@ -3244,10 +3245,12 @@ static int lfs2_file_open_(lfs2_t *lfs2, lfs2_file_t *file,
|
||||
#endif
|
||||
|
||||
static int lfs2_file_close_(lfs2_t *lfs2, lfs2_file_t *file) {
|
||||
#ifndef LFS2_READONLY
|
||||
int err = lfs2_file_sync_(lfs2, file);
|
||||
#else
|
||||
int err = 0;
|
||||
#ifndef LFS2_READONLY
|
||||
// it's not safe to do anything if our file errored
|
||||
if (!(file->flags & LFS2_F_ERRED)) {
|
||||
err = lfs2_file_sync_(lfs2, file);
|
||||
}
|
||||
#endif
|
||||
|
||||
// remove from list of mdirs
|
||||
@@ -3429,18 +3432,12 @@ relocate:
|
||||
|
||||
#ifndef LFS2_READONLY
|
||||
static int lfs2_file_sync_(lfs2_t *lfs2, lfs2_file_t *file) {
|
||||
if (file->flags & LFS2_F_ERRED) {
|
||||
// it's not safe to do anything if our file errored
|
||||
return 0;
|
||||
}
|
||||
|
||||
int err = lfs2_file_flush(lfs2, file);
|
||||
if (err) {
|
||||
file->flags |= LFS2_F_ERRED;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
if ((file->flags & LFS2_F_DIRTY) &&
|
||||
!lfs2_pair_isnull(file->m.pair)) {
|
||||
// before we commit metadata, we need sync the disk to make sure
|
||||
@@ -3485,6 +3482,17 @@ static int lfs2_file_sync_(lfs2_t *lfs2, lfs2_file_t *file) {
|
||||
file->flags &= ~LFS2_F_DIRTY;
|
||||
}
|
||||
|
||||
// mark any other file handles as dirty + desync
|
||||
for (lfs2_file_t *f = (lfs2_file_t*)lfs2->mlist; f; f = f->next) {
|
||||
if (file != f
|
||||
&& f->type == LFS2_TYPE_REG
|
||||
&& lfs2_pair_cmp(f->m.pair, file->m.pair) == 0
|
||||
&& f->id == file->id) {
|
||||
f->flags |= LFS2_F_DUSTY;
|
||||
}
|
||||
}
|
||||
|
||||
file->flags &= ~LFS2_F_ERRED & ~LFS2_F_DUSTY;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -3692,7 +3700,7 @@ static lfs2_ssize_t lfs2_file_write_(lfs2_t *lfs2, lfs2_file_t *file,
|
||||
return nsize;
|
||||
}
|
||||
|
||||
file->flags &= ~LFS2_F_ERRED;
|
||||
file->flags &= ~LFS2_F_ERRED & ~LFS2_F_DUSTY;
|
||||
return nsize;
|
||||
}
|
||||
#endif
|
||||
@@ -4771,7 +4779,8 @@ int lfs2_fs_traverse_(lfs2_t *lfs2,
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((f->flags & LFS2_F_DIRTY) && !(f->flags & LFS2_F_INLINE)) {
|
||||
if (((f->flags & LFS2_F_DIRTY) || (f->flags & LFS2_F_DUSTY))
|
||||
&& !(f->flags & LFS2_F_INLINE)) {
|
||||
int err = lfs2_ctz_traverse(lfs2, &f->cache, &lfs2->rcache,
|
||||
f->ctz.head, f->ctz.size, cb, data);
|
||||
if (err) {
|
||||
|
||||
Reference in New Issue
Block a user