74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.2 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_H
 | ||
|  | #define FS_H
 | ||
|  | 
 | ||
|  | #define FS_FILE_READ (1 << 0)
 | ||
|  | #define FS_FILE_WRITE (1 << 1)
 | ||
|  | 
 | ||
|  | #include "kernel/types.h"
 | ||
|  | #include "device.h"
 | ||
|  | 
 | ||
|  | struct fs; | ||
|  | struct fs_volume; | ||
|  | struct fs_dirent; | ||
|  | struct fs_file; | ||
|  | 
 | ||
|  | /*
 | ||
|  | fs_resolve is the most common interface to the filesystem code. | ||
|  | Given a path, it interprets it in the context of the current | ||
|  | process and returns a dirent. | ||
|  | */ | ||
|  | 
 | ||
|  | struct fs_dirent *fs_resolve(const char *path); | ||
|  | 
 | ||
|  | /*
 | ||
|  | fs_lookup returns the filesystem driver corresponding to | ||
|  | the given name, such as "cdromfs" or "diskfs" | ||
|  | */ | ||
|  | 
 | ||
|  | struct fs *fs_lookup(const char *name); | ||
|  | 
 | ||
|  | /*
 | ||
|  | A volume is an instance of a filesystem stored on a block device. | ||
|  | To begin using a filesystem, open the volume and retrieve the | ||
|  | root directory entry with fs_volume_root. | ||
|  | */ | ||
|  | 
 | ||
|  | int fs_volume_format(struct fs *f, struct device *d); | ||
|  | struct fs_volume *fs_volume_open(struct fs *f, struct device *d ); | ||
|  | struct fs_volume *fs_volume_addref(struct fs_volume *v); | ||
|  | struct fs_dirent *fs_volume_root(struct fs_volume *vOB); | ||
|  | int fs_volume_close(struct fs_volume *v); | ||
|  | 
 | ||
|  | /*
 | ||
|  | A fs_dirent represents one directory entry (file, dir, symlink, etc) | ||
|  | in the filesystem tree.  It contains the basic information about | ||
|  | the object (size, type, etc) and may be read and written. | ||
|  | */ | ||
|  | 
 | ||
|  | struct fs_dirent *fs_dirent_traverse(struct fs_dirent *d, const char *path); | ||
|  | struct fs_dirent *fs_dirent_mkdir(struct fs_dirent *d, const char *name); | ||
|  | struct fs_dirent *fs_dirent_mkfile(struct fs_dirent *d, const char *name); | ||
|  | struct fs_dirent *fs_dirent_addref(struct fs_dirent *d); | ||
|  | int fs_dirent_read(struct fs_dirent *d, char *buffer, uint32_t length, uint32_t offset); | ||
|  | int fs_dirent_write(struct fs_dirent *d, const char *buffer, uint32_t length, uint32_t offset); | ||
|  | int fs_dirent_list(struct fs_dirent *d, char *buffer, int buffer_length); | ||
|  | int fs_dirent_remove(struct fs_dirent *d, const char *name); | ||
|  | int fs_dirent_size(struct fs_dirent *d ); | ||
|  | int fs_dirent_isdir(struct fs_dirent *d); | ||
|  | int fs_dirent_close(struct fs_dirent *d); | ||
|  | int fs_dirent_copy( struct fs_dirent *src, struct fs_dirent *dst, int depth ); | ||
|  | 
 | ||
|  | /*
 | ||
|  | Register a new filesystem type, typically at system startup. | ||
|  | */ | ||
|  | 
 | ||
|  | void fs_register(struct fs *f); | ||
|  | 
 | ||
|  | #endif
 |