commit - 17391a5db4bf92ad21c2da3d6d2b2f1205606dd3
commit + 6658888da36b684c02f27edaf6f7752b9db9a92c
blob - 6a011c9806e1da49b76ca09bd701941b2ada6a0c
blob + 86e1de297b54b57c3e50b5bef3d7eeed6bcee85d
--- ftp.c
+++ ftp.c
ASSERT_EMPTYBUF();
}
-static size_t
-walk_path(int fid, int newfid, const char *path, size_t *rnw, struct qid *qids)
+static int
+walk_path(int fid, int newfid, const char *path, struct qid *qid)
{
char *wnames[MAXWELEM], *p, *t;
size_t nwname, i;
nwname++;
}
- *rnw = nwname;
-
twalk(fid, newfid, (const char **)wnames, nwname);
do_send();
recv_msg();
nwqid = np_read16(buf);
assert(nwqid <= nwname);
+ /* consume all qids */
for (i = 0; i < nwname; ++i)
- np_read_qid(buf, &qids[i]);
+ np_read_qid(buf, qid);
free(p);
- return nwqid;
+ return nwqid == nwname;
}
static void
static void
cmd_cd(int argc, const char **argv)
{
- struct qid qids[MAXWELEM];
- size_t nwname, nwqid;
+ struct qid qid;
if (argc != 1) {
printf("usage: cd remote-path\n");
return;
}
- nwqid = walk_path(PWDFID, PWDFID, argv[0], &nwname, qids);
- if (nwqid != nwname)
+ if (walk_path(PWDFID, PWDFID, argv[0], &qid) == -1 ||
+ !(qid.type & QTDIR))
printf("can't cd %s\n", argv[0]);
}