package P9P.rpcSrv;
import java.io.*;
import P9P.type.*;
import P9P.msg.*;
import PFS.*;
public class rpc9Pwalk extends rpc9P {
Twalk9P tmsg;
public rpc9Pwalk (Twalk9P m) {
tmsg = m;
}
public rmsg9P process(fidtable fidt) {
Rwalk9P rmsg = new Rwalk9P();
pfid qid = fidt.get(tmsg.fid.value);
pfid nqid = fidt.getNew(tmsg.newfid.value);
nqid.setFile(qid.getFile());
if (qid!=null&&nqid!=null) {
rmsg.wqid = new qid9P[tmsg.nwname.value];
for(int i=0;i<tmsg.nwname.value;i++) {
try {
nqid.setFile(nqid.walk(tmsg.wname[i].value));
}
catch (Exception e) {
fidt.drop(tmsg.newfid.value);
return returnError("[Twalk]",tmsg.tag,e);
}
rmsg.wqid[i]=nqid.getqid();
}
rmsg.type.value = cto9P.Rwalk;
rmsg.tag.value = tmsg.tag.value;
rmsg.nwqid.value = rmsg.wqid.length;
return rmsg;
}
return returnError("[Twalk] Error NO FID found.",tmsg.tag,null);
}
}