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
|