Skip to content

Commit 9f8d0d6

Browse files
committed
Merge commit '0f4e334388e0e05554a78d14d0a5ef73f02209b2'
2 parents ee52d6d + 0f4e334 commit 9f8d0d6

File tree

12 files changed

+86
-50
lines changed

12 files changed

+86
-50
lines changed

.travis.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@ script:
1111
-n 'tests*'
1212

1313
# Run littlefs functional tests
14-
- CFLAGS="-Wno-error=format" make -Clittlefs test
14+
- CFLAGS="-Wno-error=format" make -Clittlefs test QUIET=1
1515

1616
# Run littlefs functional tests with different configurations
1717
# Note: r/w size of 64 is default in mbed
1818
- CFLAGS="-Wno-error=format -DLFS_READ_SIZE=64 -DLFS_PROG_SIZE=64"
19-
make -Clittlefs test
19+
make -Clittlefs test QUIET=1
2020
- CFLAGS="-Wno-error=format -DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1"
21-
make -Clittlefs test
21+
make -Clittlefs test QUIET=1
2222
- CFLAGS="-Wno-error=format -DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512"
23-
make -Clittlefs test
23+
make -Clittlefs test QUIET=1
2424
- CFLAGS="-Wno-error=format -DLFS_BLOCK_COUNT=1023"
25-
make -Clittlefs test
25+
make -Clittlefs test QUIET=1
2626
- CFLAGS="-Wno-error=format -DLFS_LOOKAHEAD=2048"
27-
make -Clittlefs test
27+
make -Clittlefs test QUIET=1
2828

2929
# Self-host with littlefs-fuse for fuzz test
3030
- make -C littlefs-fuse
@@ -37,7 +37,7 @@ script:
3737
- cp -r $(git ls-tree --name-only HEAD littlefs/) mount/littlefs
3838
- cd mount/littlefs
3939
- ls
40-
- CFLAGS="-Wno-error=format" make -B test_dirs
40+
- CFLAGS="-Wno-error=format" make -B test_dirs QUIET=1
4141

4242
install:
4343
# Get arm-none-eabi-gcc

LittleFileSystem.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static int lfs_toerror(int err) {
3434
case LFS_ERR_OK: return 0;
3535
case LFS_ERR_IO: return -EIO;
3636
case LFS_ERR_NOENT: return -ENOENT;
37-
case LFS_ERR_EXISTS: return -EEXIST;
37+
case LFS_ERR_EXIST: return -EEXIST;
3838
case LFS_ERR_NOTDIR: return -ENOTDIR;
3939
case LFS_ERR_ISDIR: return -EISDIR;
4040
case LFS_ERR_INVAL: return -EINVAL;

TESTS/util/replacements_mbed.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
- ['LFS_TYPE_([A-Z]+)', 'DT_\1']
2626
- ['LFS_O_([A-Z]+)', 'O_\1']
2727
- ['LFS_SEEK_([A-Z]+)', 'SEEK_\1']
28-
- ['LFS_ERR_EXISTS', '-EEXIST']
2928
- ['LFS_ERR_([A-Z]+)', '-E\1']
3029
- ['lfs_(s?)size_t', '\1size_t']
3130
- ['lfs_soff_t', 'off_t']

TESTS/util/replacements_retarget.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
- ['LFS_TYPE_([A-Z]+)', 'DT_\1']
2424
- ['LFS_SEEK_([A-Z]+)', 'SEEK_\1']
25-
- ['LFS_ERR_EXISTS', '-EEXIST']
2625
- ['LFS_ERR_([A-Z]+)', '-E\1']
2726
- ['lfs_(s?)size_t', '\1size_t']
2827
- ['lfs_soff_t', 'off_t']

littlefs/.travis.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ script:
99
-include stdio.h -Werror' make all size
1010

1111
# run tests
12-
- make test
12+
- make test QUIET=1
1313

1414
# run tests with a few different configurations
15-
- CFLAGS="-DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" make test
16-
- CFLAGS="-DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" make test
17-
- CFLAGS="-DLFS_BLOCK_COUNT=1023" make test
18-
- CFLAGS="-DLFS_LOOKAHEAD=2048" make test
15+
- CFLAGS="-DLFS_READ_SIZE=1 -DLFS_PROG_SIZE=1" make test QUIET=1
16+
- CFLAGS="-DLFS_READ_SIZE=512 -DLFS_PROG_SIZE=512" make test QUIET=1
17+
- CFLAGS="-DLFS_BLOCK_COUNT=1023" make test QUIET=1
18+
- CFLAGS="-DLFS_LOOKAHEAD=2048" make test QUIET=1
1919

2020
# self-host with littlefs-fuse for fuzz test
2121
- make -C littlefs-fuse
@@ -28,7 +28,7 @@ script:
2828
- cp -r $(git ls-tree --name-only HEAD) mount/littlefs
2929
- cd mount/littlefs
3030
- ls
31-
- make -B test_dirs
31+
- make -B test_dirs QUIET=1
3232

3333
before_install:
3434
- fusermount -V

littlefs/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ size: $(OBJ)
3434
test: test_format test_dirs test_files test_seek test_parallel \
3535
test_alloc test_paths test_orphan test_move test_corrupt
3636
test_%: tests/test_%.sh
37+
ifdef QUIET
38+
./$< | sed '/^[^-=]/d'
39+
else
3740
./$<
41+
endif
3842

3943
-include $(DEP)
4044

littlefs/emubd/lfs_emubd.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ int lfs_emubd_prog(const struct lfs_config *cfg, lfs_block_t block,
138138
snprintf(emu->child, LFS_NAME_MAX, "%x", block);
139139

140140
FILE *f = fopen(emu->path, "r+b");
141-
if (!f && errno != ENOENT) {
142-
return -errno;
141+
if (!f) {
142+
return (errno == EACCES) ? 0 : -errno;
143143
}
144144

145145
// Check that file was erased
@@ -189,14 +189,14 @@ int lfs_emubd_erase(const struct lfs_config *cfg, lfs_block_t block) {
189189
return -errno;
190190
}
191191

192-
if (!err && S_ISREG(st.st_mode)) {
192+
if (!err && S_ISREG(st.st_mode) && (S_IWUSR & st.st_mode)) {
193193
int err = unlink(emu->path);
194194
if (err) {
195195
return -errno;
196196
}
197197
}
198198

199-
if (err || S_ISREG(st.st_mode)) {
199+
if (errno == ENOENT || (S_ISREG(st.st_mode) && (S_IWUSR & st.st_mode))) {
200200
FILE *f = fopen(emu->path, "w");
201201
if (!f) {
202202
return -errno;

littlefs/lfs.c

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -531,18 +531,19 @@ static int lfs_dir_commit(lfs_t *lfs, lfs_dir_t *dir,
531531
}
532532

533533
// successful commit, check checksum to make sure
534-
crc = 0xffffffff;
534+
uint32_t ncrc = 0xffffffff;
535535
err = lfs_bd_crc(lfs, dir->pair[0], 0,
536-
0x7fffffff & dir->d.size, &crc);
536+
(0x7fffffff & dir->d.size)-4, &ncrc);
537537
if (err) {
538538
return err;
539539
}
540540

541-
if (crc == 0) {
542-
break;
541+
if (ncrc != crc) {
542+
goto relocate;
543543
}
544544
}
545545

546+
break;
546547
relocate:
547548
//commit was corrupted
548549
LFS_DEBUG("Bad block at %ld", dir->pair[0]);
@@ -818,7 +819,7 @@ int lfs_mkdir(lfs_t *lfs, const char *path) {
818819
lfs_entry_t entry;
819820
err = lfs_dir_find(lfs, &cwd, &entry, &path);
820821
if (err != LFS_ERR_NOENT || strchr(path, '/') != NULL) {
821-
return err ? err : LFS_ERR_EXISTS;
822+
return err ? err : LFS_ERR_EXIST;
822823
}
823824

824825
// build up new directory
@@ -1053,17 +1054,18 @@ static int lfs_ctz_find(lfs_t *lfs,
10531054
static int lfs_ctz_extend(lfs_t *lfs,
10541055
lfs_cache_t *rcache, lfs_cache_t *pcache,
10551056
lfs_block_t head, lfs_size_t size,
1056-
lfs_off_t *block, lfs_block_t *off) {
1057+
lfs_block_t *block, lfs_off_t *off) {
10571058
while (true) {
1058-
if (true) {
1059-
// go ahead and grab a block
1060-
int err = lfs_alloc(lfs, block);
1061-
if (err) {
1062-
return err;
1063-
}
1064-
assert(*block >= 2 && *block <= lfs->cfg->block_count);
1059+
// go ahead and grab a block
1060+
lfs_block_t nblock;
1061+
int err = lfs_alloc(lfs, &nblock);
1062+
if (err) {
1063+
return err;
1064+
}
1065+
assert(nblock >= 2 && nblock <= lfs->cfg->block_count);
10651066

1066-
err = lfs_bd_erase(lfs, *block);
1067+
if (true) {
1068+
err = lfs_bd_erase(lfs, nblock);
10671069
if (err) {
10681070
if (err == LFS_ERR_CORRUPT) {
10691071
goto relocate;
@@ -1072,6 +1074,7 @@ static int lfs_ctz_extend(lfs_t *lfs,
10721074
}
10731075

10741076
if (size == 0) {
1077+
*block = nblock;
10751078
*off = 0;
10761079
return 0;
10771080
}
@@ -1091,7 +1094,7 @@ static int lfs_ctz_extend(lfs_t *lfs,
10911094
}
10921095

10931096
err = lfs_cache_prog(lfs, pcache, rcache,
1094-
*block, i, &data, 1);
1097+
nblock, i, &data, 1);
10951098
if (err) {
10961099
if (err == LFS_ERR_CORRUPT) {
10971100
goto relocate;
@@ -1100,6 +1103,7 @@ static int lfs_ctz_extend(lfs_t *lfs,
11001103
}
11011104
}
11021105

1106+
*block = nblock;
11031107
*off = size;
11041108
return 0;
11051109
}
@@ -1110,7 +1114,7 @@ static int lfs_ctz_extend(lfs_t *lfs,
11101114

11111115
for (lfs_off_t i = 0; i < skips; i++) {
11121116
int err = lfs_cache_prog(lfs, pcache, rcache,
1113-
*block, 4*i, &head, 4);
1117+
nblock, 4*i, &head, 4);
11141118
if (err) {
11151119
if (err == LFS_ERR_CORRUPT) {
11161120
goto relocate;
@@ -1129,12 +1133,13 @@ static int lfs_ctz_extend(lfs_t *lfs,
11291133
assert(head >= 2 && head <= lfs->cfg->block_count);
11301134
}
11311135

1136+
*block = nblock;
11321137
*off = 4*skips;
11331138
return 0;
11341139
}
11351140

11361141
relocate:
1137-
LFS_DEBUG("Bad block at %ld", *block);
1142+
LFS_DEBUG("Bad block at %ld", nblock);
11381143

11391144
// just clear cache and try a new block
11401145
pcache->block = 0xffffffff;
@@ -1214,7 +1219,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
12141219
} else if (entry.d.type == LFS_TYPE_DIR) {
12151220
return LFS_ERR_ISDIR;
12161221
} else if (flags & LFS_O_EXCL) {
1217-
return LFS_ERR_EXISTS;
1222+
return LFS_ERR_EXIST;
12181223
}
12191224

12201225
// setup file struct
@@ -1398,7 +1403,9 @@ int lfs_file_sync(lfs_t *lfs, lfs_file_t *file) {
13981403
return err;
13991404
}
14001405

1401-
if ((file->flags & LFS_F_DIRTY) && !lfs_pairisnull(file->pair)) {
1406+
if ((file->flags & LFS_F_DIRTY) &&
1407+
!(file->flags & LFS_F_ERRED) &&
1408+
!lfs_pairisnull(file->pair)) {
14021409
// update dir entry
14031410
lfs_dir_t cwd;
14041411
int err = lfs_dir_fetch(lfs, &cwd, file->pair);
@@ -1532,6 +1539,7 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
15321539
file->head, file->size,
15331540
file->pos-1, &file->block, &file->off);
15341541
if (err) {
1542+
file->flags |= LFS_F_ERRED;
15351543
return err;
15361544
}
15371545

@@ -1545,6 +1553,7 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
15451553
file->block, file->pos,
15461554
&file->block, &file->off);
15471555
if (err) {
1556+
file->flags |= LFS_F_ERRED;
15481557
return err;
15491558
}
15501559

@@ -1560,13 +1569,15 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
15601569
if (err == LFS_ERR_CORRUPT) {
15611570
goto relocate;
15621571
}
1572+
file->flags |= LFS_F_ERRED;
15631573
return err;
15641574
}
15651575

15661576
break;
15671577
relocate:
15681578
err = lfs_file_relocate(lfs, file);
15691579
if (err) {
1580+
file->flags |= LFS_F_ERRED;
15701581
return err;
15711582
}
15721583
}
@@ -1579,6 +1590,7 @@ lfs_ssize_t lfs_file_write(lfs_t *lfs, lfs_file_t *file,
15791590
lfs_alloc_ack(lfs);
15801591
}
15811592

1593+
file->flags &= ~LFS_F_ERRED;
15821594
return size;
15831595
}
15841596

littlefs/lfs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ enum lfs_error {
4545
LFS_ERR_IO = -5, // Error during device operation
4646
LFS_ERR_CORRUPT = -52, // Corrupted
4747
LFS_ERR_NOENT = -2, // No directory entry
48-
LFS_ERR_EXISTS = -17, // Entry already exists
48+
LFS_ERR_EXIST = -17, // Entry already exists
4949
LFS_ERR_NOTDIR = -20, // Entry is not a dir
5050
LFS_ERR_ISDIR = -21, // Entry is a dir
5151
LFS_ERR_INVAL = -22, // Invalid parameter
@@ -75,6 +75,7 @@ enum lfs_open_flags {
7575
LFS_F_DIRTY = 0x10000, // File does not match storage
7676
LFS_F_WRITING = 0x20000, // File has been written since last flush
7777
LFS_F_READING = 0x40000, // File has been read since last flush
78+
LFS_F_ERRED = 0x80000, // An error occured during write
7879
};
7980

8081
// File seek flags

0 commit comments

Comments
 (0)