xref: /inferno-os/liblogfs/path.c (revision 28942ead413418b56c5be78e8c4c400881fba72e)
1*28942eadSforsyth #include "logfsos.h"
237da2899SCharles.Forsyth #include "logfs.h"
337da2899SCharles.Forsyth #include "local.h"
437da2899SCharles.Forsyth 
537da2899SCharles.Forsyth enum {
637da2899SCharles.Forsyth 	PATHMOD = 127
737da2899SCharles.Forsyth };
837da2899SCharles.Forsyth 
937da2899SCharles.Forsyth static int
compare(void * a,void * b)10*28942eadSforsyth compare(void *a, void *b)
1137da2899SCharles.Forsyth {
12*28942eadSforsyth 	Path *f = a;
13*28942eadSforsyth 	ulong path = (ulong)b;	/* sic */
1437da2899SCharles.Forsyth 	return f->path == path;
1537da2899SCharles.Forsyth }
1637da2899SCharles.Forsyth 
1737da2899SCharles.Forsyth static int
allocsize(void * key)1837da2899SCharles.Forsyth allocsize(void *key)
1937da2899SCharles.Forsyth {
2037da2899SCharles.Forsyth 	USED(key);
2137da2899SCharles.Forsyth 	return sizeof(Path);
2237da2899SCharles.Forsyth }
2337da2899SCharles.Forsyth 
2437da2899SCharles.Forsyth char *
logfspathmapnew(PathMap ** pathmapp)2537da2899SCharles.Forsyth logfspathmapnew(PathMap **pathmapp)
2637da2899SCharles.Forsyth {
27*28942eadSforsyth 	return logfsmapnew(PATHMOD, logfshashulong, compare, allocsize, nil, pathmapp);
2837da2899SCharles.Forsyth }
2937da2899SCharles.Forsyth 
3037da2899SCharles.Forsyth char *
logfspathmapnewentry(PathMap * m,ulong path,Entry * e,Path ** pathmapp)3137da2899SCharles.Forsyth logfspathmapnewentry(PathMap *m, ulong path, Entry *e, Path **pathmapp)
3237da2899SCharles.Forsyth {
3337da2899SCharles.Forsyth 	char *errmsg;
3437da2899SCharles.Forsyth 	errmsg = logfsmapnewentry(m, (void*)path, pathmapp);
3537da2899SCharles.Forsyth 	if(errmsg)
3637da2899SCharles.Forsyth 		return errmsg;
3737da2899SCharles.Forsyth 	if(*pathmapp == nil)
3837da2899SCharles.Forsyth 		return nil;
3937da2899SCharles.Forsyth 	(*pathmapp)->path = path;
4037da2899SCharles.Forsyth 	(*pathmapp)->entry = e;
4137da2899SCharles.Forsyth 	return nil;
4237da2899SCharles.Forsyth }
4337da2899SCharles.Forsyth 
4437da2899SCharles.Forsyth Entry *
logfspathmapfinde(PathMap * m,ulong path)4537da2899SCharles.Forsyth logfspathmapfinde(PathMap *m, ulong path)
4637da2899SCharles.Forsyth {
4737da2899SCharles.Forsyth 	Path *p;
4837da2899SCharles.Forsyth 	p = logfspathmapfindentry(m, path);
4937da2899SCharles.Forsyth 	return p ? p->entry : nil;
5037da2899SCharles.Forsyth }
51