basekernel/kernel/fs_internal.h

62 lines
1.5 KiB
C
Raw Permalink Normal View History

2024-10-14 23:07:00 +02:00
/*
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