vfs.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 inode {
  32. struct inode_flags flags;
  33. uint32_t perm;
  34. uint32_t impl;
  35. uint32_t ino;
  36. const struct inode_ops* ops;
  37. };
  38. struct dirent {
  39. char name[128];
  40. uint32_t ino;
  41. };
  42. extern struct inode fs_root;
  43. void init_vfs(void);
  44. size_t vfs_read(struct inode* file, char* buf, size_t buf_size, size_t offset, size_t n);
  45. size_t vfs_write(struct inode* file, const char* buf, size_t offset, size_t n);
  46. int vfs_readdir(struct inode* dir, struct dirent* entry, size_t i);
  47. int vfs_finddir(struct inode* dir, struct dirent* entry, const char* filename);
  48. int vfs_mkfile(struct inode* dir, const char* filename);
  49. int vfs_rmfile(struct inode* dir, const char* filename);
  50. int vfs_mkdir(struct inode* dir, const char* dirname);
  51. #ifdef __cplusplus
  52. }
  53. #endif