@@ -1290,13 +1290,6 @@ static int lfs_dir_getentry(lfs_t *lfs, lfs_mdir_t *dir,
1290
1290
1291
1291
static int lfs_dir_getinfo (lfs_t * lfs , lfs_mdir_t * dir ,
1292
1292
int16_t id , struct lfs_info * info ) {
1293
- if (id < 0 ) {
1294
- // special case for root
1295
- strcpy (info -> name , "/" );
1296
- info -> type = LFS_TYPE_DIR ;
1297
- return 0 ;
1298
- }
1299
-
1300
1293
if (id == dir -> moveid ) {
1301
1294
int moved = lfs_moved (lfs , dir , dir -> moveid );
1302
1295
if (moved < 0 ) {
@@ -1366,7 +1359,7 @@ static int lfs_dir_finder(lfs_t *lfs, void *p, lfs_mattr_t attr) {
1366
1359
1367
1360
// TODO drop others, make this only return id, also make get take in only entry to populate (with embedded tag)
1368
1361
static int lfs_dir_find (lfs_t * lfs , lfs_mdir_t * dir ,
1369
- const char * * path , int16_t * id ) {
1362
+ const char * * path , uint16_t * id ) {
1370
1363
lfs_mattr_t attr = {
1371
1364
.u .pair [0 ] = lfs -> root [0 ],
1372
1365
.u .pair [1 ] = lfs -> root [1 ],
@@ -1384,9 +1377,8 @@ static int lfs_dir_find(lfs_t *lfs, lfs_mdir_t *dir,
1384
1377
1385
1378
// special case for root dir
1386
1379
if (find .name [0 ] == '\0' ) {
1387
- // TODO set up root?
1388
- * id = -1 ;
1389
- return 0 ;
1380
+ // Return ISDIR when we hit root
1381
+ return LFS_ERR_ISDIR ;
1390
1382
}
1391
1383
1392
1384
// skip '.' and root '..'
@@ -1492,9 +1484,9 @@ int lfs_mkdir(lfs_t *lfs, const char *path) {
1492
1484
}
1493
1485
1494
1486
lfs_mdir_t cwd ;
1495
- int err = lfs_dir_find (lfs , & cwd , & path , & (int16_t ){0 });
1487
+ int err = lfs_dir_find (lfs , & cwd , & path , & (uint16_t ){0 });
1496
1488
if (err != LFS_ERR_NOENT || strchr (path , '/' ) != NULL ) {
1497
- if (!err ) {
1489
+ if (!err || err == LFS_ERR_ISDIR ) {
1498
1490
return LFS_ERR_EXIST ;
1499
1491
}
1500
1492
return err ;
@@ -1543,14 +1535,14 @@ int lfs_mkdir(lfs_t *lfs, const char *path) {
1543
1535
}
1544
1536
1545
1537
int lfs_dir_open (lfs_t * lfs , lfs_dir_t * dir , const char * path ) {
1546
- int16_t id ;
1538
+ uint16_t id ;
1547
1539
int err = lfs_dir_find (lfs , & dir -> m , & path , & id );
1548
- if (err ) {
1540
+ if (err && err != LFS_ERR_ISDIR ) {
1549
1541
return err ;
1550
1542
}
1551
1543
1552
1544
lfs_mattr_t attr ;
1553
- if (id < 0 ) {
1545
+ if (err == LFS_ERR_ISDIR ) {
1554
1546
// handle root dir separately
1555
1547
attr .u .pair [0 ] = lfs -> root [0 ];
1556
1548
attr .u .pair [1 ] = lfs -> root [1 ];
@@ -1895,7 +1887,7 @@ int lfs_file_open(lfs_t *lfs, lfs_file_t *file,
1895
1887
1896
1888
// allocate entry for file if it doesn't exist
1897
1889
lfs_mdir_t cwd ;
1898
- int16_t id ;
1890
+ uint16_t id ;
1899
1891
int err = lfs_dir_find (lfs , & cwd , & path , & id );
1900
1892
if (err && (err != LFS_ERR_NOENT || strchr (path , '/' ) != NULL )) {
1901
1893
return err ;
@@ -2573,12 +2565,19 @@ lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file) {
2573
2565
/// General fs operations ///
2574
2566
int lfs_stat (lfs_t * lfs , const char * path , struct lfs_info * info ) {
2575
2567
lfs_mdir_t cwd ;
2576
- int16_t id ;
2568
+ uint16_t id ;
2577
2569
int err = lfs_dir_find (lfs , & cwd , & path , & id );
2578
- if (err ) {
2570
+ if (err && err != LFS_ERR_ISDIR ) {
2579
2571
return err ;
2580
2572
}
2581
2573
2574
+ if (err == LFS_ERR_ISDIR ) {
2575
+ // special case for root
2576
+ strcpy (info -> name , "/" );
2577
+ info -> type = LFS_TYPE_DIR ;
2578
+ return 0 ;
2579
+ }
2580
+
2582
2581
return lfs_dir_getinfo (lfs , & cwd , id , info );
2583
2582
}
2584
2583
@@ -2597,7 +2596,7 @@ int lfs_remove(lfs_t *lfs, const char *path) {
2597
2596
return err ;
2598
2597
}
2599
2598
2600
- int16_t id ;
2599
+ uint16_t id ;
2601
2600
err = lfs_dir_find (lfs , & cwd , & path , & id );
2602
2601
if (err ) {
2603
2602
return err ;
@@ -2669,7 +2668,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
2669
2668
2670
2669
// find old entry
2671
2670
lfs_mdir_t oldcwd ;
2672
- int16_t oldid ;
2671
+ uint16_t oldid ;
2673
2672
int err = lfs_dir_find (lfs , & oldcwd , & oldpath , & oldid );
2674
2673
if (err ) {
2675
2674
return err ;
@@ -2685,7 +2684,7 @@ int lfs_rename(lfs_t *lfs, const char *oldpath, const char *newpath) {
2685
2684
2686
2685
// find new entry
2687
2686
lfs_mdir_t newcwd ;
2688
- int16_t newid ;
2687
+ uint16_t newid ;
2689
2688
err = lfs_dir_find (lfs , & newcwd , & newpath , & newid );
2690
2689
if (err && err != LFS_ERR_NOENT ) {
2691
2690
return err ;
@@ -3746,18 +3745,18 @@ int lfs_deorphan(lfs_t *lfs) {
3746
3745
// return lfs_dir_setattrs(lfs, &dir, &entry, attrs, count);
3747
3746
//}
3748
3747
3749
- static int lfs_fs_size_count (void * p , lfs_block_t block ) {
3750
- lfs_size_t * size = p ;
3751
- * size += 1 ;
3752
- return 0 ;
3753
- }
3754
-
3755
- lfs_ssize_t lfs_fs_size (lfs_t * lfs ) {
3756
- lfs_size_t size = 0 ;
3757
- int err = lfs_fs_traverse (lfs , lfs_fs_size_count , & size );
3758
- if (err ) {
3759
- return err ;
3760
- }
3761
-
3762
- return size ;
3763
- }
3748
+ // static int lfs_fs_size_count(void *p, lfs_block_t block) {
3749
+ // lfs_size_t *size = p;
3750
+ // *size += 1;
3751
+ // return 0;
3752
+ // }
3753
+ //
3754
+ // lfs_ssize_t lfs_fs_size(lfs_t *lfs) {
3755
+ // lfs_size_t size = 0;
3756
+ // int err = lfs_fs_traverse(lfs, lfs_fs_size_count, &size);
3757
+ // if (err) {
3758
+ // return err;
3759
+ // }
3760
+ //
3761
+ // return size;
3762
+ // }
0 commit comments