@@ -724,6 +724,19 @@ static int lfs_dir_find(lfs_t *lfs, lfs_dir_t *dir,
724
724
pathname += strspn (pathname , "/" );
725
725
pathlen = strcspn (pathname , "/" );
726
726
727
+ // special case for root dir
728
+ if (pathname [0 ] == '\0' ) {
729
+ * entry = (lfs_entry_t ){
730
+ .d .type = LFS_TYPE_DIR ,
731
+ .d .elen = sizeof (entry -> d ) - 4 ,
732
+ .d .alen = 0 ,
733
+ .d .nlen = 0 ,
734
+ .d .u .dir [0 ] = lfs -> root [0 ],
735
+ .d .u .dir [1 ] = lfs -> root [1 ],
736
+ };
737
+ return 0 ;
738
+ }
739
+
727
740
// skip '.' and root '..'
728
741
if ((pathlen == 1 && memcmp (pathname , "." , 1 ) == 0 ) ||
729
742
(pathlen == 2 && memcmp (pathname , ".." , 2 ) == 0 )) {
@@ -880,15 +893,6 @@ int lfs_dir_open(lfs_t *lfs, lfs_dir_t *dir, const char *path) {
880
893
return err ;
881
894
}
882
895
883
- // check for root, can only be something like '/././../.'
884
- if (strspn (path , "/." ) == strlen (path )) {
885
- dir -> head [0 ] = dir -> pair [0 ];
886
- dir -> head [1 ] = dir -> pair [1 ];
887
- dir -> pos = sizeof (dir -> d ) - 2 ;
888
- dir -> off = sizeof (dir -> d );
889
- return 0 ;
890
- }
891
-
892
896
lfs_entry_t entry ;
893
897
err = lfs_dir_find (lfs , dir , & entry , & path );
894
898
if (err ) {
@@ -1671,14 +1675,6 @@ lfs_soff_t lfs_file_size(lfs_t *lfs, lfs_file_t *file) {
1671
1675
1672
1676
/// General fs oprations ///
1673
1677
int lfs_stat (lfs_t * lfs , const char * path , struct lfs_info * info ) {
1674
- // check for root, can only be something like '/././../.'
1675
- if (strspn (path , "/." ) == strlen (path )) {
1676
- memset (info , 0 , sizeof (* info ));
1677
- info -> type = LFS_TYPE_DIR ;
1678
- strcpy (info -> name , "/" );
1679
- return 0 ;
1680
- }
1681
-
1682
1678
lfs_dir_t cwd ;
1683
1679
int err = lfs_dir_fetch (lfs , & cwd , lfs -> root );
1684
1680
if (err ) {
@@ -1697,11 +1693,15 @@ int lfs_stat(lfs_t *lfs, const char *path, struct lfs_info *info) {
1697
1693
info -> size = entry .d .u .file .size ;
1698
1694
}
1699
1695
1700
- err = lfs_bd_read (lfs , cwd .pair [0 ],
1701
- entry .off + 4 + entry .d .elen + entry .d .alen ,
1702
- info -> name , entry .d .nlen );
1703
- if (err ) {
1704
- return err ;
1696
+ if (lfs_paircmp (entry .d .u .dir , lfs -> root ) == 0 ) {
1697
+ strcpy (info -> name , "/" );
1698
+ } else {
1699
+ err = lfs_bd_read (lfs , cwd .pair [0 ],
1700
+ entry .off + 4 + entry .d .elen + entry .d .alen ,
1701
+ info -> name , entry .d .nlen );
1702
+ if (err ) {
1703
+ return err ;
1704
+ }
1705
1705
}
1706
1706
1707
1707
return 0 ;
0 commit comments