fidmap.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #include "logfsos.h"
  2. #include "logfs.h"
  3. #include "local.h"
  4. enum {
  5. FIDMOD = 127
  6. };
  7. int
  8. logfshashulong(void *v, int size)
  9. {
  10. return (ulong)v % size;
  11. }
  12. /*
  13. * TO DO: assumes map.c always passes sought key value as b, and value in map as a
  14. */
  15. static int
  16. compare(void *a, void *b)
  17. {
  18. Fid *f = a;
  19. ulong fid = (ulong)b; /* sic */
  20. //print("fidcompare(%ld, %ld)\n", f->fid, fid);
  21. return f->fid == fid;
  22. }
  23. static int
  24. allocsize(void *key)
  25. {
  26. USED(key);
  27. return sizeof(Fid);
  28. }
  29. static void
  30. fidfree(void *a)
  31. {
  32. Fid *f = a;
  33. logfsdrsfree(&f->drs);
  34. }
  35. char *
  36. logfsfidmapnew(FidMap **fidmapp)
  37. {
  38. return logfsmapnew(FIDMOD, logfshashulong, compare, allocsize, fidfree, fidmapp);
  39. }
  40. int
  41. logfsfidmapclunk(FidMap *m, ulong fid)
  42. {
  43. Fid *f = logfsfidmapfindentry(m, fid);
  44. if(f != nil){
  45. logfsentryclunk(f->entry);
  46. logfsmapdeleteentry(m, (void *)fid);
  47. return 1;
  48. }
  49. return 0;
  50. }
  51. char *
  52. logfsfidmapnewentry(FidMap *m, ulong fid, Fid **fidmapp)
  53. {
  54. char *errmsg;
  55. errmsg = logfsmapnewentry(m, (void*)fid, fidmapp);
  56. if(errmsg)
  57. return errmsg;
  58. if(*fidmapp == nil)
  59. return nil;
  60. (*fidmapp)->fid = fid;
  61. (*fidmapp)->openmode = -1;
  62. return nil;
  63. }