plan9fox/sys/src/cmd/hgfs/util.c
2012-10-29 22:00:38 +01:00

60 lines
838 B
C

#include <u.h>
#include <libc.h>
#include <thread.h>
#include "dat.h"
#include "fns.h"
ulong
hashstr(char *s)
{
ulong h, t;
char c;
h = 0;
while(c = *s++){
t = h & 0xf8000000;
h <<= 5;
h ^= t>>27;
h ^= (ulong)c;
}
return h;
}
int
getworkdir(char *work, char *path)
{
char buf[MAXPATH], *s;
if(path != nil){
snprint(work, MAXPATH, "%s", path);
cleanname(work);
} else if(getwd(work, MAXPATH) == nil)
return -1;
for(;;){
snprint(buf, sizeof(buf), "%s/.hg", work);
if(access(buf, AEXIST) == 0)
return 0;
if(path != nil)
break;
if((s = strrchr(work, '/')) == nil)
break;
*s = 0;
}
return -1;
}
int
readfile(char *path, char *buf, int nbuf)
{
int fd, n;
n = 0;
if((fd = open(path, OREAD)) >= 0){
if((n = read(fd, buf, nbuf-1)) < 0)
n = 0;
close(fd);
}
buf[n] = '\0';
return n;
}