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
 |