Skip to content

Commit 646b1b5

Browse files
committed
Added -Wjump-misses-init and fixed uninitialized warnings
1 parent 1b7a155 commit 646b1b5

File tree

2 files changed

+114
-107
lines changed

2 files changed

+114
-107
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ ifdef WORD
2525
override CFLAGS += -m$(WORD)
2626
endif
2727
override CFLAGS += -I.
28-
override CFLAGS += -std=c99 -Wall -pedantic -Wshadow -Wunused-parameter
28+
override CFLAGS += -std=c99 -Wall -pedantic
29+
override CFLAGS += -Wshadow -Wunused-parameter -Wjump-misses-init
2930

3031

3132
all: $(TARGET)

lfs.c

Lines changed: 112 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,137 +2096,143 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
20962096
}
20972097

20982098
int lfs_format(lfs_t *lfs, const struct lfs_config *cfg) {
2099-
int err = lfs_init(lfs, cfg);
2100-
if (err) {
2101-
return err;
2102-
}
2099+
int err = 0;
2100+
if (true) {
2101+
err = lfs_init(lfs, cfg);
2102+
if (err) {
2103+
return err;
2104+
}
21032105

2104-
// create free lookahead
2105-
memset(lfs->free.buffer, 0, lfs->cfg->lookahead/8);
2106-
lfs->free.off = 0;
2107-
lfs->free.size = lfs_min(lfs->cfg->lookahead, lfs->cfg->block_count);
2108-
lfs->free.i = 0;
2109-
lfs_alloc_ack(lfs);
2106+
// create free lookahead
2107+
memset(lfs->free.buffer, 0, lfs->cfg->lookahead/8);
2108+
lfs->free.off = 0;
2109+
lfs->free.size = lfs_min(lfs->cfg->lookahead, lfs->cfg->block_count);
2110+
lfs->free.i = 0;
2111+
lfs_alloc_ack(lfs);
21102112

2111-
// create superblock dir
2112-
lfs_dir_t superdir;
2113-
err = lfs_dir_alloc(lfs, &superdir);
2114-
if (err) {
2115-
goto cleanup;
2116-
}
2113+
// create superblock dir
2114+
lfs_dir_t superdir;
2115+
err = lfs_dir_alloc(lfs, &superdir);
2116+
if (err) {
2117+
goto cleanup;
2118+
}
21172119

2118-
// write root directory
2119-
lfs_dir_t root;
2120-
err = lfs_dir_alloc(lfs, &root);
2121-
if (err) {
2122-
goto cleanup;
2123-
}
2120+
// write root directory
2121+
lfs_dir_t root;
2122+
err = lfs_dir_alloc(lfs, &root);
2123+
if (err) {
2124+
goto cleanup;
2125+
}
21242126

2125-
err = lfs_dir_commit(lfs, &root, NULL, 0);
2126-
if (err) {
2127-
goto cleanup;
2128-
}
2129-
2130-
lfs->root[0] = root.pair[0];
2131-
lfs->root[1] = root.pair[1];
2132-
2133-
// write superblocks
2134-
lfs_superblock_t superblock = {
2135-
.off = sizeof(superdir.d),
2136-
.d.type = LFS_TYPE_SUPERBLOCK,
2137-
.d.elen = sizeof(superblock.d) - sizeof(superblock.d.magic) - 4,
2138-
.d.nlen = sizeof(superblock.d.magic),
2139-
.d.version = LFS_DISK_VERSION,
2140-
.d.magic = {"littlefs"},
2141-
.d.block_size = lfs->cfg->block_size,
2142-
.d.block_count = lfs->cfg->block_count,
2143-
.d.root = {lfs->root[0], lfs->root[1]},
2144-
};
2145-
superdir.d.tail[0] = root.pair[0];
2146-
superdir.d.tail[1] = root.pair[1];
2147-
superdir.d.size = sizeof(superdir.d) + sizeof(superblock.d) + 4;
2148-
2149-
// write both pairs to be safe
2150-
lfs_superblock_tole32(&superblock.d);
2151-
bool valid = false;
2152-
for (int i = 0; i < 2; i++) {
2153-
err = lfs_dir_commit(lfs, &superdir, (struct lfs_region[]){
2154-
{sizeof(superdir.d), sizeof(superblock.d),
2155-
&superblock.d, sizeof(superblock.d)}
2156-
}, 1);
2157-
if (err && err != LFS_ERR_CORRUPT) {
2127+
err = lfs_dir_commit(lfs, &root, NULL, 0);
2128+
if (err) {
21582129
goto cleanup;
21592130
}
21602131

2161-
valid = valid || !err;
2162-
}
2132+
lfs->root[0] = root.pair[0];
2133+
lfs->root[1] = root.pair[1];
2134+
2135+
// write superblocks
2136+
lfs_superblock_t superblock = {
2137+
.off = sizeof(superdir.d),
2138+
.d.type = LFS_TYPE_SUPERBLOCK,
2139+
.d.elen = sizeof(superblock.d) - sizeof(superblock.d.magic) - 4,
2140+
.d.nlen = sizeof(superblock.d.magic),
2141+
.d.version = LFS_DISK_VERSION,
2142+
.d.magic = {"littlefs"},
2143+
.d.block_size = lfs->cfg->block_size,
2144+
.d.block_count = lfs->cfg->block_count,
2145+
.d.root = {lfs->root[0], lfs->root[1]},
2146+
};
2147+
superdir.d.tail[0] = root.pair[0];
2148+
superdir.d.tail[1] = root.pair[1];
2149+
superdir.d.size = sizeof(superdir.d) + sizeof(superblock.d) + 4;
21632150

2164-
if (!valid) {
2165-
err = LFS_ERR_CORRUPT;
2166-
goto cleanup;
2167-
}
2151+
// write both pairs to be safe
2152+
lfs_superblock_tole32(&superblock.d);
2153+
bool valid = false;
2154+
for (int i = 0; i < 2; i++) {
2155+
err = lfs_dir_commit(lfs, &superdir, (struct lfs_region[]){
2156+
{sizeof(superdir.d), sizeof(superblock.d),
2157+
&superblock.d, sizeof(superblock.d)}
2158+
}, 1);
2159+
if (err && err != LFS_ERR_CORRUPT) {
2160+
goto cleanup;
2161+
}
21682162

2169-
// sanity check that fetch works
2170-
err = lfs_dir_fetch(lfs, &superdir, (const lfs_block_t[2]){0, 1});
2171-
if (err) {
2172-
goto cleanup;
2173-
}
2163+
valid = valid || !err;
2164+
}
21742165

2175-
lfs_alloc_ack(lfs);
2166+
if (!valid) {
2167+
err = LFS_ERR_CORRUPT;
2168+
goto cleanup;
2169+
}
2170+
2171+
// sanity check that fetch works
2172+
err = lfs_dir_fetch(lfs, &superdir, (const lfs_block_t[2]){0, 1});
2173+
if (err) {
2174+
goto cleanup;
2175+
}
2176+
2177+
lfs_alloc_ack(lfs);
2178+
}
21762179

21772180
cleanup:
21782181
lfs_deinit(lfs);
21792182
return err;
21802183
}
21812184

21822185
int lfs_mount(lfs_t *lfs, const struct lfs_config *cfg) {
2183-
int err = lfs_init(lfs, cfg);
2184-
if (err) {
2185-
return err;
2186-
}
2187-
2188-
// setup free lookahead
2189-
lfs->free.off = 0;
2190-
lfs->free.size = 0;
2191-
lfs->free.i = 0;
2192-
lfs_alloc_ack(lfs);
2186+
int err = 0;
2187+
if (true) {
2188+
err = lfs_init(lfs, cfg);
2189+
if (err) {
2190+
return err;
2191+
}
21932192

2194-
// load superblock
2195-
lfs_dir_t dir;
2196-
lfs_superblock_t superblock;
2197-
err = lfs_dir_fetch(lfs, &dir, (const lfs_block_t[2]){0, 1});
2198-
if (err && err != LFS_ERR_CORRUPT) {
2199-
goto cleanup;
2200-
}
2193+
// setup free lookahead
2194+
lfs->free.off = 0;
2195+
lfs->free.size = 0;
2196+
lfs->free.i = 0;
2197+
lfs_alloc_ack(lfs);
22012198

2202-
if (!err) {
2203-
err = lfs_bd_read(lfs, dir.pair[0], sizeof(dir.d),
2204-
&superblock.d, sizeof(superblock.d));
2205-
lfs_superblock_fromle32(&superblock.d);
2206-
if (err) {
2199+
// load superblock
2200+
lfs_dir_t dir;
2201+
lfs_superblock_t superblock;
2202+
err = lfs_dir_fetch(lfs, &dir, (const lfs_block_t[2]){0, 1});
2203+
if (err && err != LFS_ERR_CORRUPT) {
22072204
goto cleanup;
22082205
}
22092206

2210-
lfs->root[0] = superblock.d.root[0];
2211-
lfs->root[1] = superblock.d.root[1];
2212-
}
2207+
if (!err) {
2208+
err = lfs_bd_read(lfs, dir.pair[0], sizeof(dir.d),
2209+
&superblock.d, sizeof(superblock.d));
2210+
lfs_superblock_fromle32(&superblock.d);
2211+
if (err) {
2212+
goto cleanup;
2213+
}
22132214

2214-
if (err || memcmp(superblock.d.magic, "littlefs", 8) != 0) {
2215-
LFS_ERROR("Invalid superblock at %d %d", 0, 1);
2216-
err = LFS_ERR_CORRUPT;
2217-
goto cleanup;
2218-
}
2215+
lfs->root[0] = superblock.d.root[0];
2216+
lfs->root[1] = superblock.d.root[1];
2217+
}
22192218

2220-
uint16_t major_version = (0xffff & (superblock.d.version >> 16));
2221-
uint16_t minor_version = (0xffff & (superblock.d.version >> 0));
2222-
if ((major_version != LFS_DISK_VERSION_MAJOR ||
2223-
minor_version > LFS_DISK_VERSION_MINOR)) {
2224-
LFS_ERROR("Invalid version %d.%d", major_version, minor_version);
2225-
err = LFS_ERR_INVAL;
2226-
goto cleanup;
2227-
}
2219+
if (err || memcmp(superblock.d.magic, "littlefs", 8) != 0) {
2220+
LFS_ERROR("Invalid superblock at %d %d", 0, 1);
2221+
err = LFS_ERR_CORRUPT;
2222+
goto cleanup;
2223+
}
22282224

2229-
return 0;
2225+
uint16_t major_version = (0xffff & (superblock.d.version >> 16));
2226+
uint16_t minor_version = (0xffff & (superblock.d.version >> 0));
2227+
if ((major_version != LFS_DISK_VERSION_MAJOR ||
2228+
minor_version > LFS_DISK_VERSION_MINOR)) {
2229+
LFS_ERROR("Invalid version %d.%d", major_version, minor_version);
2230+
err = LFS_ERR_INVAL;
2231+
goto cleanup;
2232+
}
2233+
2234+
return 0;
2235+
}
22302236

22312237
cleanup:
22322238

0 commit comments

Comments
 (0)