#ifndef FILE_SYSTEM_STRUCT_H
#define FILE_SYSTEM_STRUCT_H
struct device_struct;
struct stat_struct;
struct file_system_struct {
const char *name;
int type;
int (*mount)(const struct device_struct *device, void **data);
void (*umount)(void *data);
int (*find)(void *data, unsigned long dir_id, const char *fs_basename, unsigned long *id, int *type);
int (*get_name)(void *data, unsigned long id, char name[]);
int (*get_device)(void *data, unsigned long spec_id, struct device_struct **spec_device);
int (*get_size)(void *data, unsigned long reg_id, unsigned long *size);
int (*stat)(void *data, unsigned long id, struct stat_struct *fs_buf);
int (*read_dir)(void *data, unsigned long dir_id, unsigned long pos, char *fs_buf, unsigned int count);
int (*read)(void *data, unsigned long leaf_id, unsigned long pos, char *fs_buf, unsigned int count);
int (*write)(void *data, unsigned long leaf_id, unsigned long pos, const char *fs_buf, unsigned int count);
int (*ioctl)(void *data, unsigned long spec_id, int request, void *fs_arg);
int (*create)(void *data, unsigned long dir_id, const char *fs_basename);
int (*mkdir)(void *data, unsigned long dir_id, const char *fs_basename);
int (*can_remove)(void *data, unsigned long leaf_id);
int (*remove)(void *data, unsigned long leaf_id, unsigned long parent_dir_id);
int (*rmdir)(void *data, unsigned long dir_id, unsigned long parent_dir_id);
int (*rename)(void *data, unsigned long old_id, unsigned long old_parent_dir_id, unsigned long new_dir_id, const char *fs_basename);
};
#endif