1 #include "logfsos.h"
2 #include "logfs.h"
3 #include "local.h"
4
5 enum {
6 FIDMOD = 127
7 };
8
9 int
logfshashulong(void * v,int size)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
compare(void * a,void * b)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
allocsize(void * key)28 allocsize(void *key)
29 {
30 USED(key);
31 return sizeof(Fid);
32 }
33
34 static void
fidfree(void * a)35 fidfree(void *a)
36 {
37 Fid *f = a;
38 logfsdrsfree(&f->drs);
39 }
40
41 char *
logfsfidmapnew(FidMap ** fidmapp)42 logfsfidmapnew(FidMap **fidmapp)
43 {
44 return logfsmapnew(FIDMOD, logfshashulong, compare, allocsize, fidfree, fidmapp);
45 }
46
47 int
logfsfidmapclunk(FidMap * m,ulong fid)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 *
logfsfidmapnewentry(FidMap * m,ulong fid,Fid ** fidmapp)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