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