tapefs.h 1.6 KB

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