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
 |