@@ -2096,137 +2096,143 @@ static int lfs_init(lfs_t *lfs, const struct lfs_config *cfg) {
20962096}
20972097
20982098int 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
21772180cleanup :
21782181 lfs_deinit (lfs );
21792182 return err ;
21802183}
21812184
21822185int 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
22312237cleanup :
22322238
0 commit comments