summaryrefslogtreecommitdiff
path: root/sys/src/cmd
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-07-01 08:31:29 +0200
committercinap_lenrek <cinap_lenrek@localhost>2011-07-01 08:31:29 +0200
commit400e1b3643881c9c26c1824c370393f1d41ae7c5 (patch)
treebf266083d48f47d81bbf5533fec7c3a05ddcb928 /sys/src/cmd
parent2f59a5d3921d7737f06a0d3c7d35af86191ab737 (diff)
hgfs: make qid generation machine independent
Diffstat (limited to 'sys/src/cmd')
-rw-r--r--sys/src/cmd/hgfs/fns.h5
-rw-r--r--sys/src/cmd/hgfs/fs.c7
-rw-r--r--sys/src/cmd/hgfs/hash.c14
-rw-r--r--sys/src/cmd/hgfs/info.c2
-rw-r--r--sys/src/cmd/hgfs/tree.c17
5 files changed, 30 insertions, 15 deletions
diff --git a/sys/src/cmd/hgfs/fns.h b/sys/src/cmd/hgfs/fns.h
index 4b3450d0e..56e51f7ed 100644
--- a/sys/src/cmd/hgfs/fns.h
+++ b/sys/src/cmd/hgfs/fns.h
@@ -1,6 +1,7 @@
/* hash */
int Hfmt(Fmt *f);
-int strhash(char *s, uchar *h);
+int hex2hash(char *s, uchar *h);
+uvlong hash2qid(uchar *h);
int fhash(int fd, uchar p1[], uchar p2[], uchar h[]);
/* patch */
@@ -24,7 +25,7 @@ int revlogopentemp(Revlog *r, int rev);
Revinfo *loadrevinfo(Revlog *changelog, int rev);
/* tree */
-char *nodepath(char *s, char *e, Revnode *nd);
+char *nodepath(char *s, char *e, Revnode *nd, int mange);
Revnode *mknode(char *name, uchar *hash, char mode);
Revtree *loadfilestree(Revlog *changelog, Revlog *manifest, Revinfo *ri);
Revtree *loadchangestree(Revlog *changelog, Revlog *manifest, Revinfo *ri);
diff --git a/sys/src/cmd/hgfs/fs.c b/sys/src/cmd/hgfs/fs.c
index c63048127..69455b2e2 100644
--- a/sys/src/cmd/hgfs/fs.c
+++ b/sys/src/cmd/hgfs/fs.c
@@ -50,7 +50,8 @@ getrevlog(Revnode *nd)
char buf[MAXPATH];
Revlog *rl;
- nodepath(seprint(buf, buf+sizeof(buf), "%s/store/data", dothg), buf+sizeof(buf), nd);
+ nodepath(seprint(buf, buf+sizeof(buf), "%s/store/data", dothg),
+ buf+sizeof(buf), nd, 1);
for(rl = revlogs; rl; rl = rl->next)
if(strcmp(buf, rl->path) == 0)
break;
@@ -189,7 +190,7 @@ fsmkqid(Qid *q, int level, void *aux)
q->type = 0;
}
ri = aux;
- q->path = *((uvlong*)ri->chash) + (level - Qrev);
+ q->path = hash2qid(ri->chash) + (level - Qrev);
q->vers = 0;
break;
case Qtree:
@@ -368,7 +369,7 @@ findrev(Revlog *rl, char *name)
rev = -1;
if(s = strchr(name, '.'))
name = s+1;
- if((n = strhash(name, hash)) > 0){
+ if((n = hex2hash(name, hash)) > 0){
for(i=0; i<rl->nmap; i++){
if(memcmp(rl->map[i].hash, hash, n) == 0){
if(rev < 0)
diff --git a/sys/src/cmd/hgfs/hash.c b/sys/src/cmd/hgfs/hash.c
index 768e35759..7723e2fb2 100644
--- a/sys/src/cmd/hgfs/hash.c
+++ b/sys/src/cmd/hgfs/hash.c
@@ -42,7 +42,7 @@ fhash(int fd, uchar p1[], uchar p2[], uchar h[])
}
int
-strhash(char *s, uchar *h)
+hex2hash(char *s, uchar *h)
{
uchar *b;
int n;
@@ -67,3 +67,15 @@ strhash(char *s, uchar *h)
}
return h - b;
}
+
+uvlong
+hash2qid(uchar *h)
+{
+ uvlong v;
+ int i;
+
+ v = 0;
+ for(i=0; i<8; i++)
+ v |= (uvlong)h[i]<<(56-8*i);
+ return v;
+}
diff --git a/sys/src/cmd/hgfs/info.c b/sys/src/cmd/hgfs/info.c
index de96e751a..2f0d01075 100644
--- a/sys/src/cmd/hgfs/info.c
+++ b/sys/src/cmd/hgfs/info.c
@@ -36,7 +36,7 @@ loadrevinfo(Revlog *changelog, int rev)
switch(line++){
case 0:
- strhash(buf, ri->mhash);
+ hex2hash(buf, ri->mhash);
break;
case 1:
ri->who = strdup(buf);
diff --git a/sys/src/cmd/hgfs/tree.c b/sys/src/cmd/hgfs/tree.c
index 517d7ad54..bb4fcb40c 100644
--- a/sys/src/cmd/hgfs/tree.c
+++ b/sys/src/cmd/hgfs/tree.c
@@ -5,7 +5,7 @@
#include "fns.h"
char*
-nodepath(char *s, char *e, Revnode *nd)
+nodepath(char *s, char *e, Revnode *nd, int mangle)
{
static char *frogs[] = {
"con", "prn", "aux", "nul",
@@ -18,9 +18,11 @@ nodepath(char *s, char *e, Revnode *nd)
if(nd == nil || nd->name == nil)
return s;
- s = seprint(nodepath(s, e, nd->up), e, "/");
-
+ s = seprint(nodepath(s, e, nd->up, mangle), e, "/");
p = nd->name;
+ if(!mangle)
+ return seprint(s, e, "%s", p);
+
for(i=0; i<nelem(frogs); i++){
l = strlen(frogs[i]);
if((strncmp(frogs[i], p, l) == 0) && (p[l] == 0 || p[l] == '.'))
@@ -54,7 +56,7 @@ mknode(char *name, uchar *hash, char mode)
memset(d, 0, sizeof(*d));
s = (char*)&d[1];
if(hash){
- d->path = *((uvlong*)hash);
+ d->path = hash2qid(hash);
memmove(d->hash = (uchar*)s, hash, HASHSZ);
s += HASHSZ;
}else
@@ -88,10 +90,9 @@ addnode(Revnode *d, char *path, uchar *hash, char mode)
c->next = d->down;
d->down = c;
}
- if(c->hash){
+ if(!slash){
p = c;
- p->path = *((uvlong*)c->hash);
- while(d->up){
+ while(d){
d->path += p->path;
p = d;
d = d->up;
@@ -142,7 +143,7 @@ loadmanifest(Revnode *root, int fd, Hashstr **ht, int nh)
x = buf;
x += strlen(x) + 1;
- strhash(x, hash);
+ hex2hash(x, hash);
x += HASHSZ*2;
if(ht == nil)