Ejemplo n.º 1
0
/*
 * mount a file system
 */
int mount(const char * dev, const char * dir, const char * fs, u32_t flags)
{
    char dev_path[MAX_PATH];
    char dir_path[MAX_PATH];
    struct stat st;
    int err;

    if((err = vfs_path_conv(dir, dir_path)) != 0)
        return err;

    if(dev != NULL)
    {
        if((err = vfs_path_conv(dev, dev_path)) != 0)
            return err;

        if(stat(dev_path, &st) != 0)
            return EEXIST;

        if(! S_ISBLK(st.st_mode))
            return EACCES;

        return sys_mount(dev_path, dir_path, (char *)fs, flags);
    }
    else
        return sys_mount(NULL, dir_path, (char *)fs, flags);
}
Ejemplo n.º 2
0
/*
 * open a file with flags and mode and return file descriptor.
 */
int open(const char * path, u32_t flags, u32_t mode)
{
    char buf[MAX_PATH];
    struct file * fp;
    int fd;
    int err;

    if((fd = fd_alloc(0)) < 0)
        return -1;

    if(vfs_path_conv(path, buf) !=0 )
    {
        fd_free(fd);
        return -1;
    }

    if((err = sys_open(buf, flags, mode, &fp)) != 0)
    {
        fd_free(fd);
        return err;
    }

    set_fp(fd, fp);
    return fd;
}
Ejemplo n.º 3
0
/*
 * unmount file systems
 */
int umount(const char * dir)
{
    char buf[MAX_PATH];
    int err;

    if((err = vfs_path_conv(dir, buf)) != 0)
        return err;

    return sys_umount(buf);
}
Ejemplo n.º 4
0
/*
 * get file's status
 */
int stat(const char * path, struct stat * st)
{
    char buf[MAX_PATH];
    int err;

    if((err = vfs_path_conv(path, buf)) !=0 )
        return err;

    return sys_stat(buf, st);
}
Ejemplo n.º 5
0
/*
 * remove a empty directories
 */
int rmdir(const char * path)
{
    char buf[MAX_PATH];
    int err;

    if((err = vfs_path_conv(path, buf)) !=0 )
        return err;

    return sys_rmdir(buf);
}
Ejemplo n.º 6
0
/*
 * create a directory with mode
 */
int mkdir(const char * path, u32_t mode)
{
    char buf[MAX_PATH];
    int err;

    if((err = vfs_path_conv(path, buf)) !=0 )
        return err;

    return sys_mkdir(buf, mode);
}
Ejemplo n.º 7
0
/*
 * mount a file system
 */
int mount(const char * dev, const char * dir, const char * fs, u32_t flags)
{
	char dir_path[MAX_PATH];
	int err;

	if((err = vfs_path_conv(dir, dir_path)) != 0)
		return err;

	return sys_mount((char *)dev, dir_path, (char *)fs, flags);
}
Ejemplo n.º 8
0
/*
 * change the current working directory to the specified path
 */
int chdir(const char * path)
{
    char buf[MAX_PATH];
    struct file * fp;
    int err;

    if((err = vfs_path_conv(path, buf)) !=0 )
        return err;

    /* check if directory exits */
    if((err = sys_opendir(buf, &fp)) != 0)
        return err;

    /* new fp for current work directory */
    if(vfs_getcwdfp())
        sys_closedir(vfs_getcwdfp());
    vfs_setcwdfp(fp);

    /* set current work directory */
    vfs_setcwd(buf);

    return 0;
}
Ejemplo n.º 9
0
/*
 * open a directory
 */
void * opendir(const char * name)
{
    char buf[MAX_PATH];
    struct dir * dir;
    struct file * fp;
    int fd;
    int err;

    if((dir = malloc(sizeof(struct dir))) == NULL)
        return NULL;

    /* find empty slot for file descriptor. */
    if((fd = fd_alloc(0)) < 0)
    {
        free(dir);
        return NULL;
    }

    if((err = vfs_path_conv(name, buf)) !=0 )
    {
        free(dir);
        fd_free(fd);
        return NULL;
    }

    if((err = sys_opendir(buf, &fp)) != 0)
    {
        free(dir);
        fd_free(fd);
        return NULL;
    }

    set_fp(fd, fp);
    dir->fd = fd;

    return (void *)dir;
}