vfs.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #pragma once
  2. #include <types/types.h>
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. struct inode;
  7. struct inode_flags;
  8. struct inode_ops;
  9. struct dirent;
  10. typedef size_t (*inode_read)(struct inode* file, char* buf, size_t buf_size, size_t offset, size_t n);
  11. typedef size_t (*inode_write)(struct inode* file, const char* buf, size_t offset, size_t n);
  12. typedef int (*inode_readdir)(struct inode* dir, struct dirent* entry, size_t i);
  13. typedef int (*inode_finddir)(struct inode* dir, struct dirent* entry, const char* filename);
  14. typedef int (*inode_mkfile)(struct inode* dir, const char* filename);
  15. typedef int (*inode_rmfile)(struct inode* dir, const char* filename);
  16. typedef int (*inode_mkdir)(struct inode* dir, const char* dirname);
  17. struct inode_flags {
  18. uint32_t file : 1;
  19. uint32_t directory : 1;
  20. uint32_t mount_point : 1;
  21. };
  22. struct inode_ops {
  23. inode_read read;
  24. inode_write write;
  25. inode_readdir readdir;
  26. inode_finddir finddir;
  27. inode_mkfile mkfile;
  28. inode_rmfile rmfile;
  29. inode_mkdir mkdir;
  30. };
  31. struct fs_info {
  32. const struct inode_ops* ops;
  33. void* impl;
  34. };
  35. struct inode {
  36. struct inode_flags flags;
  37. uint32_t perm;
  38. void* impl;
  39. uint32_t ino;
  40. struct fs_info* fs;
  41. };
  42. struct dirent {
  43. char name[128];
  44. uint32_t ino;
  45. };
  46. extern struct inode* fs_root;
  47. void init_vfs(void);
  48. size_t vfs_read(struct inode* file, char* buf, size_t buf_size, size_t offset, size_t n);
  49. size_t vfs_write(struct inode* file, const char* buf, size_t offset, size_t n);
  50. int vfs_readdir(struct inode* dir, struct dirent* entry, size_t i);
  51. int vfs_finddir(struct inode* dir, struct dirent* entry, const char* filename);
  52. int vfs_mkfile(struct inode* dir, const char* filename);
  53. int vfs_rmfile(struct inode* dir, const char* filename);
  54. int vfs_mkdir(struct inode* dir, const char* dirname);
  55. #ifdef __cplusplus
  56. }
  57. #endif