@@ -105,11 +105,15 @@ int lfs_driver_init() {
105105 return result ;
106106}
107107
108+ static bool initialise (void ) {
109+ static bool done = false;
110+ if (!done && (lfs_driver_init () == 0 )) done = true;
111+ return done ;
112+ }
113+
108114static int open_fd (void ) {
109- static int initialized = 0 ;
110115 int i , fd = -1 ;
111- if (!initialized && (lfs_driver_init () == 0 )) initialized = 1 ;
112- if (initialized ) {
116+ if (initialise ()) {
113117 for (i = 0 ; i < LFS_MAX_FDS ; i ++ ) {
114118 if (s_fds [i ].isopen == 0 ) {
115119 s_fds [i ].isopen = 1 ;
@@ -201,6 +205,14 @@ struct dirent *readdir(DIR *dir) {
201205 return & dirent ;
202206}
203207
208+ int _stat (char * path , struct stat * st ) {
209+ struct lfs_info info ;
210+ if (lfs_stat (& s_lfs , path , & info ) != 0 ) return -1 ;
211+ st -> st_mode = info .type == LFS_TYPE_DIR ? S_IFDIR : S_IFREG ;
212+ st -> st_size = info .size ;
213+ return 0 ;
214+ }
215+
204216int _fstat (int fd , struct stat * st ) {
205217 if (fd < 0 && fd > LFS_MAX_FDS + 2 ) return -1 ;
206218 st -> st_mode = S_IFCHR ;
@@ -210,5 +222,5 @@ int _fstat(int fd, struct stat *st) {
210222int mkdir (const char * path , mode_t mode ) {
211223 // printf("%s(%s, %u)\n", __func__, path, mode);
212224 (void ) path , (void ) mode ;
213- return lfs_mkdir (& s_lfs , path );
225+ return initialise () ? lfs_mkdir (& s_lfs , path ) : -1 ;
214226}
0 commit comments