62 lines
1.5 KiB
C
62 lines
1.5 KiB
C
/*
|
|
Copyright (C) 2016-2019 The University of Notre Dame
|
|
This software is distributed under the GNU General Public License.
|
|
See the file LICENSE for details.
|
|
*/
|
|
|
|
#ifndef FS_INTERNAL
|
|
#define FS_INTERNAL
|
|
|
|
#include "fs.h"
|
|
#include "cdromfs.h"
|
|
#include "diskfs.h"
|
|
|
|
struct fs {
|
|
char *name;
|
|
const struct fs_ops *ops;
|
|
struct fs *next;
|
|
};
|
|
|
|
struct fs_volume {
|
|
struct fs *fs;
|
|
struct device *device;
|
|
uint32_t block_size;
|
|
int refcount;
|
|
union {
|
|
struct cdrom_volume cdrom;
|
|
struct diskfs_superblock disk;
|
|
};
|
|
};
|
|
|
|
struct fs_dirent {
|
|
struct fs_volume *volume;
|
|
uint32_t size;
|
|
int inumber;
|
|
int refcount;
|
|
int isdir;
|
|
union {
|
|
struct cdrom_dirent cdrom;
|
|
struct diskfs_inode disk;
|
|
};
|
|
};
|
|
|
|
struct fs_ops {
|
|
struct fs_dirent *(*volume_root) (struct fs_volume *v);
|
|
struct fs_volume *(*volume_open) (struct device *d);
|
|
int (*volume_close) (struct fs_volume *d);
|
|
int (*volume_format) (struct device *d);
|
|
|
|
struct fs_dirent * (*lookup) (struct fs_dirent *d, const char *name);
|
|
struct fs_dirent * (*mkdir) (struct fs_dirent *d, const char *name);
|
|
struct fs_dirent * (*mkfile) (struct fs_dirent *d, const char *name);
|
|
|
|
int (*read_block) (struct fs_dirent *d, char *buffer, uint32_t blocknum);
|
|
int (*write_block) (struct fs_dirent *d, const char *buffer, uint32_t blocknum);
|
|
int (*list) (struct fs_dirent *d, char *buffer, int buffer_length);
|
|
int (*remove) (struct fs_dirent *d, const char *name);
|
|
int (*resize) (struct fs_dirent *d, uint32_t blocks);
|
|
int (*close) (struct fs_dirent *d);
|
|
};
|
|
|
|
#endif
|