1 #include "logfsos.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 /* 16 * TO DO: assumes map.c always passes sought key value as b, and value in map as a 17 */ 18 static int 19 compare(void *a, void *b) 20 { 21 Fid *f = a; 22 ulong fid = (ulong)b; /* sic */ 23 //print("fidcompare(%ld, %ld)\n", f->fid, fid); 24 return f->fid == fid; 25 } 26 27 static int 28 allocsize(void *key) 29 { 30 USED(key); 31 return sizeof(Fid); 32 } 33 34 static void 35 fidfree(void *a) 36 { 37 Fid *f = a; 38 logfsdrsfree(&f->drs); 39 } 40 41 char * 42 logfsfidmapnew(FidMap **fidmapp) 43 { 44 return logfsmapnew(FIDMOD, logfshashulong, compare, allocsize, fidfree, fidmapp); 45 } 46 47 int 48 logfsfidmapclunk(FidMap *m, ulong fid) 49 { 50 Fid *f = logfsfidmapfindentry(m, fid); 51 if(f != nil){ 52 logfsentryclunk(f->entry); 53 logfsmapdeleteentry(m, (void *)fid); 54 return 1; 55 } 56 return 0; 57 } 58 59 char * 60 logfsfidmapnewentry(FidMap *m, ulong fid, Fid **fidmapp) 61 { 62 char *errmsg; 63 errmsg = logfsmapnewentry(m, (void*)fid, fidmapp); 64 if(errmsg) 65 return errmsg; 66 if(*fidmapp == nil) 67 return nil; 68 (*fidmapp)->fid = fid; 69 (*fidmapp)->openmode = -1; 70 return nil; 71 } 72