Skip to content

Commit 60a60df

Browse files
committed
Add _stat and refactor initialise()
1 parent 6603f2b commit 60a60df

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

templates/lfs/nucleo-h563zi/retarget_lfs.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
108114
static 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+
204216
int _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) {
210222
int 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

Comments
 (0)