Exemplo n.º 1
0
////// 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);
}
Exemplo n.º 2
0
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);
}