#include "file_system_struct.h"
#include "vfat_instance.h"
#include "vfat_instance_struct.h"
#include "device_struct.h"
#include <stat_struct.h>
#include <kmalloc.h>
#include <errno.h>
#include <consts.h>
#include <stddef.h>
static int vfat_mount(const struct device_struct *device, void **data)
{
int retval;
if (!(*data = kmalloc(sizeof (struct vfat_instance_struct)))) {
retval = -ENOMEM;
goto error;
}
if ((retval = vfat_instance_init(*data, device)) < 0)
goto error_free;
return 0;
error_free:
kfree(*data, sizeof (struct vfat_instance_struct));
error:
return retval;
}
static void vfat_umount(void *data)
{
vfat_instance_destroy(data);
kfree(data, sizeof (struct vfat_instance_struct));
}
static int vfat_find(void *data, unsigned long dir_id, const char *fs_basename, unsigned long *id, int *type)
{
return vfat_instance_find(data, dir_id, fs_basename, id, type);
}
static int vfat_get_name(void *data, unsigned long id, char name[])
{
return vfat_instance_get_name(data, id, name);
}
static int vfat_get_size(void *data, unsigned long reg_id, unsigned long *size)
{
return vfat_instance_get_size(data, reg_id, size);
}
static int vfat_stat(void *data, unsigned long id, struct stat_struct *fs_buf)
{
return vfat_instance_stat(data, id, fs_buf);
}
static int vfat_read_dir(void *data, unsigned long dir_id, unsigned long pos, char *fs_buf, unsigned int count)
{
return vfat_instance_read_dir(data, dir_id, pos, fs_buf, count);
}
static int vfat_read(void *data, unsigned long leaf_id, unsigned long pos, char *fs_buf, unsigned int count)
{
return vfat_instance_read(data, leaf_id, pos, fs_buf, count);
}
static int vfat_write(void *data, unsigned long leaf_id, unsigned long pos, const char *fs_buf, unsigned int count)
{
return vfat_instance_write(data, leaf_id, pos, fs_buf, count);
}
static int vfat_create(void *data, unsigned long dir_id, const char *fs_basename)
{
return vfat_instance_create(data, dir_id, fs_basename);
}
static int vfat_mkdir(void *data, unsigned long dir_id, const char *fs_basename)
{
return vfat_instance_mkdir(data, dir_id, fs_basename);
}
static int vfat_can_remove(void *data, unsigned long leaf_id)
{
return vfat_instance_can_remove(data, leaf_id);
}
static int vfat_remove(void *data, unsigned long leaf_id, unsigned long parent_dir_id)
{
return vfat_instance_remove(data, leaf_id, parent_dir_id);
}
static int vfat_rmdir(void *data, unsigned long dir_id, unsigned long parent_dir_id)
{
return vfat_instance_rmdir(data, dir_id, parent_dir_id);
}
static int vfat_rename(void *data, unsigned long old_id, unsigned long old_parent_dir_id, unsigned long new_dir_id, const char *fs_basename)
{
return vfat_instance_rename(data, old_id, old_parent_dir_id, new_dir_id, fs_basename);
}
const struct file_system_struct vfat = {
.name = "vfat",
.type = FT_BLK,
.mount = vfat_mount,
.umount = vfat_umount,
.find = vfat_find,
.get_name = vfat_get_name,
.get_device = NULL,
.get_size = vfat_get_size,
.stat = vfat_stat,
.read_dir = vfat_read_dir,
.read = vfat_read,
.write = vfat_write,
.ioctl = NULL,
.create = vfat_create,
.mkdir = vfat_mkdir,
.can_remove = vfat_can_remove,
.remove = vfat_remove,
.rmdir = vfat_rmdir,
.rename = vfat_rename
};