forsyth20121205-174063a80cc13 years agoHistory
65 lines · 960 B · C
RawDownload
#include "logfsos.h"#include "logfs.h"#include "local.h" enum {	USTMOD = 127}; typedef struct UstNode {	char s[1];} UstNode; struct Ust {	UstNode *head[USTMOD];}; intlogfshashstring(void *s, int n){	int h = 0;	char *p;	for(p = s; *p; p++) {		ulong g;		h = (h << 4) + *p;		g = h & 0xf0000000;		if(g != 0)			h ^= ((g >> 24) & 0xff) | g;	}	return (h & ~(1 << 31)) % n;} static intcompare(void *entry, void *key){	return strcmp((char*)entry, (char*)key) == 0;} static intallocsize(void *key){	return strlen(key) + 1;} char *logfsustnew(Ust **ustp){	return logfsmapnew(USTMOD, logfshashstring, compare, allocsize, nil, ustp);} char *logfsustadd(Ust *ust, char *s){	char *errmsg;	char *ep;	ep = logfsmapfindentry(ust, s);	if(ep != nil) {//		print("ust: found %s\n", s);		return ep;	}	errmsg = logfsmapnewentry(ust, s, &ep);	if(errmsg != nil)		return errmsg;//	print("ust: new %s\n", s);	return strcpy(ep, s);}