tapefs.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #define g2byte(x) (((x)[1]<<8) + (x)[0]) /* little-endian */
  2. #define g3byte(x) (((x)[2]<<16) + ((x)[1]<<8) + (x)[0])
  3. #define g4byte(x) (((x)[3]<<24) + ((x)[2]<<16) + ((x)[1]<<8) + (x)[0])
  4. /* big endian */
  5. #define b4byte(x) (((x)[0]<<24) + ((x)[1]<<16) + ((x)[2]<<8) + (x)[3])
  6. #define b8byte(x) (((vlong)b4byte(x)<<32) | (u32int)b4byte((x)+4))
  7. enum
  8. {
  9. OPERM = 0x3, /* mask of all permission types in open mode */
  10. Nram = 512,
  11. Maxbuf = 8192, /* max buffer size */
  12. };
  13. typedef struct Fid Fid;
  14. typedef struct Ram Ram;
  15. struct Fid
  16. {
  17. short busy;
  18. short open;
  19. short rclose;
  20. int fid;
  21. Fid *next;
  22. char *user;
  23. Ram *ram;
  24. };
  25. struct Ram
  26. {
  27. char busy;
  28. char open;
  29. char replete;
  30. Ram *parent; /* parent directory */
  31. Ram *child; /* first member of directory */
  32. Ram *next; /* next member of file's directory */
  33. Qid qid;
  34. long perm;
  35. char *name;
  36. ulong atime;
  37. ulong mtime;
  38. char *user;
  39. char *group;
  40. vlong addr;
  41. void *data;
  42. vlong ndata;
  43. };
  44. enum
  45. {
  46. Pexec = 1,
  47. Pwrite = 2,
  48. Pread = 4,
  49. Pother = 1,
  50. Pgroup = 8,
  51. Powner = 64,
  52. };
  53. typedef struct idmap {
  54. char *name;
  55. int id;
  56. } Idmap;
  57. typedef struct fileinf {
  58. char *name;
  59. vlong addr;
  60. void *data;
  61. vlong size;
  62. int mode;
  63. int uid;
  64. int gid;
  65. long mdate;
  66. } Fileinf;
  67. extern ulong path; /* incremented for each new file */
  68. extern Ram *ram;
  69. extern char *user;
  70. extern Idmap *uidmap;
  71. extern Idmap *gidmap;
  72. extern int replete;
  73. extern int blocksize;
  74. void error(char*);
  75. void *erealloc(void*, ulong);
  76. void *emalloc(ulong);
  77. char *estrdup(char*);
  78. void populate(char *);
  79. void dotrunc(Ram*);
  80. void docreate(Ram*);
  81. char *doread(Ram*, vlong, long);
  82. void dowrite(Ram*, char*, long, long);
  83. int dopermw(Ram*);
  84. Idmap *getpass(char*);
  85. char *mapid(Idmap*,int);
  86. Ram *poppath(Fileinf fi, int new);
  87. Ram *popfile(Ram *dir, Fileinf fi);
  88. void popdir(Ram*);
  89. Ram *lookup(Ram*, char*);