/filesystems/unixfs/common/unixfs/unixfs_common.h

http://macfuse.googlecode.com/ · C Header · 69 lines · 52 code · 6 blank · 11 comment · 0 complexity · 9869fe677c13e643a1b9368eeb75ae8d MD5 · raw file

  1. /*
  2. * UnixFS
  3. *
  4. * A general-purpose file system layer for writing/reimplementing/porting
  5. * Unix file systems through MacFUSE.
  6. * Copyright (c) 2008 Amit Singh. All Rights Reserved.
  7. * http://osxbook.com
  8. */
  9. #ifndef _UNIXFS_COMMON_H_
  10. #define _UNIXFS_COMMON_H_
  11. /* Implementation of Ancient Unix file system internals. */
  12. static void* unixfs_internal_init(const char* dmg, uint32_t flags,
  13. fs_endian_t fse, char** fsname,
  14. char** volname);
  15. static void unixfs_internal_fini(void*);
  16. static off_t unixfs_internal_alloc(void);
  17. static off_t unixfs_internal_bmap(struct inode* ip, off_t lblkno,
  18. int* error);
  19. static int unixfs_internal_bread(off_t blkno, char *blkbuf);
  20. static struct inode* unixfs_internal_iget(ino_t ino);
  21. static void unixfs_internal_iput(struct inode* ip);
  22. static int unixfs_internal_igetattr(ino_t ino, struct stat *stbuf);
  23. static void unixfs_internal_istat(struct inode* ip,
  24. struct stat* stbuf);
  25. static int unixfs_internal_namei(ino_t parentino, const char *name,
  26. struct stat* stbuf);
  27. static int unixfs_internal_nextdirentry(struct inode* ip,
  28. struct unixfs_dirbuf* dirbuf,
  29. off_t* offset,
  30. struct unixfs_direntry* dent);
  31. static ssize_t unixfs_internal_pbread(struct inode* ip, char* buf,
  32. size_t nbyte, off_t offset,
  33. int* error);
  34. static int unixfs_internal_sanitycheck(void* filsys, off_t disksize);
  35. static int unixfs_internal_readlink(ino_t ino,
  36. char path[UNIXFS_MAXPATHLEN]);
  37. static int unixfs_internal_statvfs(struct statvfs* svb);
  38. /* To be used in file-system-specific code. */
  39. #define DECL_UNIXFS(fsname, sufx) \
  40. static struct unixfs_ops ops_##sufx = { \
  41. .init = unixfs_internal_init, \
  42. .fini = unixfs_internal_fini, \
  43. .alloc = unixfs_internal_alloc, \
  44. .bmap = unixfs_internal_bmap, \
  45. .bread = unixfs_internal_bread, \
  46. .iget = unixfs_internal_iget, \
  47. .iput = unixfs_internal_iput, \
  48. .igetattr = unixfs_internal_igetattr, \
  49. .istat = unixfs_internal_istat, \
  50. .namei = unixfs_internal_namei, \
  51. .nextdirentry = unixfs_internal_nextdirentry, \
  52. .pbread = unixfs_internal_pbread, \
  53. .readlink = unixfs_internal_readlink, \
  54. .sanitycheck = unixfs_internal_sanitycheck, \
  55. .statvfs = unixfs_internal_statvfs, \
  56. }; \
  57. struct unixfs unixfs_##sufx = { \
  58. &ops_##sufx, NULL, -1, 0 \
  59. }; \
  60. static struct super_block* unixfs = NULL; \
  61. static const char* unixfs_fstype = fsname;
  62. #endif /* _UNIXFS_COMMON_H_ */