Handle unliked files, fixes #87

This commit is contained in:
copy 2017-06-11 12:02:59 -05:00
parent ff9ea8d5ff
commit ce9e375352

View file

@ -171,7 +171,7 @@ Virtio9p.prototype.ReceiveRequest = function (index, GetByte) {
//if (inode.status == STATUS_LOADING) return;
var ret = this.fs.OpenInode(idx, mode);
this.fs.AddEvent(this.fids[fid].inodeid,
this.fs.AddEvent(this.fids[fid].inodeid,
function() {
message.Debug("file opened " + inode.name + " tag:"+tag);
req[0] = inode.qid;
@ -312,6 +312,13 @@ Virtio9p.prototype.ReceiveRequest = function (index, GetByte) {
var fid = req[0];
var inode = this.fs.GetInode(this.fids[fid].inodeid);
message.Debug("[getattr]: fid=" + fid + " name=" + inode.name + " request mask=" + req[1]);
if(!inode || inode.status === STATUS_UNLINKED)
{
message.Debug("getattr: unlinked");
this.SendError(tag, "No such file or directory", ENOENT);
this.SendReply(0, index);
break;
}
req[0] |= 0x1000; // P9_STATS_GEN
req[0] = req[1]; // request mask
@ -410,6 +417,13 @@ Virtio9p.prototype.ReceiveRequest = function (index, GetByte) {
var inode = this.fs.GetInode(this.fids[fid].inodeid);
if (id == 40) message.Debug("[treaddir]: fid=" + fid + " offset=" + offset + " count=" + count);
if (id == 116) message.Debug("[read]: fid=" + fid + " (" + inode.name + ") offset=" + offset + " count=" + count + " fidtype=" + this.fids[fid].type);
if(!inode || inode.status === STATUS_UNLINKED)
{
message.Debug("read/treaddir: unlinked");
this.SendError(tag, "No such file or directory", ENOENT);
this.SendReply(0, index);
break;
}
if (this.fids[fid].type == FID_XATTR) {
if (inode.caps.length < offset+count) count = inode.caps.length - offset;
for(var i=0; i<count; i++)