more hjfs fixes
This commit is contained in:
parent
34bf0ce496
commit
f2c70fe2f7
|
@ -21,8 +21,7 @@ static int
|
||||||
walkpath(Chan *ch, char *path, char **cr)
|
walkpath(Chan *ch, char *path, char **cr)
|
||||||
{
|
{
|
||||||
char buf[NAMELEN], *p, *fp;
|
char buf[NAMELEN], *p, *fp;
|
||||||
|
|
||||||
buf[NAMELEN - 1] = 0;
|
|
||||||
fp = path;
|
fp = path;
|
||||||
if(*path != '/'){
|
if(*path != '/'){
|
||||||
noent:
|
noent:
|
||||||
|
@ -51,6 +50,7 @@ walkpath(Chan *ch, char *path, char **cr)
|
||||||
break;
|
break;
|
||||||
if(p - path >= NAMELEN)
|
if(p - path >= NAMELEN)
|
||||||
goto noent;
|
goto noent;
|
||||||
|
memset(buf, 0, sizeof buf);
|
||||||
memcpy(buf, path, p - path);
|
memcpy(buf, path, p - path);
|
||||||
if(chanwalk(ch, buf) <= 0){
|
if(chanwalk(ch, buf) <= 0){
|
||||||
werrstr("%s: %r", fp);
|
werrstr("%s: %r", fp);
|
||||||
|
|
|
@ -115,6 +115,8 @@ again:
|
||||||
runlock(fs);
|
runlock(fs);
|
||||||
wlock(fs);
|
wlock(fs);
|
||||||
}
|
}
|
||||||
|
if(l->next != nil && willmodify(fs, l->next, 1) < 0)
|
||||||
|
goto err;
|
||||||
rc = chref(fs, l->blk, 0);
|
rc = chref(fs, l->blk, 0);
|
||||||
if(rc < 0)
|
if(rc < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
@ -125,8 +127,7 @@ again:
|
||||||
}
|
}
|
||||||
if(rc == 1)
|
if(rc == 1)
|
||||||
goto done;
|
goto done;
|
||||||
if(willmodify(fs, l->next, 1) < 0)
|
|
||||||
goto err;
|
|
||||||
p = getbuf(fs->d, l->next->blk, TDENTRY, 0);
|
p = getbuf(fs->d, l->next->blk, TDENTRY, 0);
|
||||||
if(p == nil)
|
if(p == nil)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
|
@ -387,7 +387,10 @@ putloc(Fs *fs, Loc *l, int loop)
|
||||||
Buf *b;
|
Buf *b;
|
||||||
|
|
||||||
qlock(&fs->loctree);
|
qlock(&fs->loctree);
|
||||||
|
if(!loop && --l->ref <= 0)
|
||||||
|
goto freeit;
|
||||||
while(loop && l != nil && l->ref <= 1){
|
while(loop && l != nil && l->ref <= 1){
|
||||||
|
freeit:
|
||||||
if((l->flags & LGONE) != 0){
|
if((l->flags & LGONE) != 0){
|
||||||
b = getbuf(fs->d, l->blk, TDENTRY, 0);
|
b = getbuf(fs->d, l->blk, TDENTRY, 0);
|
||||||
if(b != nil){
|
if(b != nil){
|
||||||
|
@ -558,12 +561,14 @@ getblk(Fs *fs, FLoc *L, Buf *bd, uvlong blk, uvlong *r, int mode)
|
||||||
return -1;
|
return -1;
|
||||||
memset(b->offs, 0, sizeof(b->offs));
|
memset(b->offs, 0, sizeof(b->offs));
|
||||||
}else{
|
}else{
|
||||||
if(mode != GBREAD && chref(fs, *loc, 0) > 1)
|
if(mode != GBREAD && chref(fs, *loc, 0) > 1){
|
||||||
if(dumpblk(fs, L, loc) < 0){
|
if(dumpblk(fs, L, loc) < 0){
|
||||||
if(b != bd)
|
if(b != bd)
|
||||||
putbuf(b);
|
putbuf(b);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
b->op |= BDELWRI;
|
||||||
|
}
|
||||||
k = *loc;
|
k = *loc;
|
||||||
if(b != bd)
|
if(b != bd)
|
||||||
putbuf(b);
|
putbuf(b);
|
||||||
|
|
Loading…
Reference in a new issue