////// File operations ////// int LittleFileSystem::file_open(fs_file_t *file, const char *path, int flags) { lfs_file_t *f = new lfs_file_t; _mutex.lock(); LFS_INFO("file_open(%p, \"%s\", 0x%x)", *file, path, flags); int err = lfs_file_open(&_lfs, f, path, lfs_fromflags(flags)); LFS_INFO("file_open -> %d", lfs_toerror(err)); _mutex.unlock(); if (!err) { *file = f; } else { delete f; } return lfs_toerror(err); }
static int _open(vfs_file_t *filp, const char *name, int flags, mode_t mode, const char *abs_path) { littlefs_desc_t *fs = filp->mp->private_data; lfs_file_t *fp = (lfs_file_t *)&filp->private_data.buffer; (void) abs_path; (void) mode; mutex_lock(&fs->lock); DEBUG("littlefs: open: filp=%p, fp=%p\n", (void *)filp, (void *)fp); int l_flags = 0; if ((flags & O_ACCMODE) == O_RDONLY) { l_flags |= LFS_O_RDONLY; } if ((flags & O_APPEND) == O_APPEND) { l_flags |= LFS_O_APPEND; } if ((flags & O_TRUNC) == O_TRUNC) { l_flags |= LFS_O_TRUNC; } if ((flags & O_CREAT) == O_CREAT) { l_flags |= LFS_O_CREAT; } if ((flags & O_ACCMODE) == O_WRONLY) { l_flags |= LFS_O_WRONLY; } if ((flags & O_ACCMODE) == O_RDWR) { l_flags |= LFS_O_RDWR; } if ((flags & O_EXCL) == O_EXCL) { l_flags |= LFS_O_EXCL; } DEBUG("littlefs: open: %s (abs_path: %s), flags: 0x%x\n", name, abs_path, (int) l_flags); int ret = lfs_file_open(&fs->fs, fp, name, l_flags); mutex_unlock(&fs->lock); return littlefs_err_to_errno(ret); }