commit - be727c17aab457ecfb1acc981c5fb82d2dc82c52
commit + 52586771172ed747dd0e1952283dbee9d3400448
blob - ec308e7d2c2e0b57472d3c6577f4e9dc8d9d7899
blob + 7279a2c3a790771058c99a9f80566975f032170a
--- ftp.c
+++ ftp.c
static void
cmd_get(int argc, const char **argv)
{
+ struct qid qid;
const char *l;
+ int nfid;
if (argc != 1 && argc != 2) {
printf("usage: get remote-file [local-file]\n");
if (argc == 2)
l = argv[1];
- else if ((l = strrchr(argv[0], '/')) == NULL)
+ else if ((l = strrchr(argv[0], '/')) != NULL)
+ l++; /* skip / */
+ else
l = argv[1];
-
- /* XXX: do_walk */
- {
- uint16_t nwqid;
- twalk(pwdfid, 1, argv, 1);
- do_send();
- recv_msg();
- expect2(Rwalk, iota_tag);
+ nfid = pwdfid+1;
+ if (walk_path(pwdfid, nfid, argv[0], &qid) == -1) {
+ printf("can't fetch %s\n", argv[0]);
+ return;
+ }
- nwqid = np_read16(buf);
- assert(nwqid == 1);
- evbuffer_drain(buf, EVBUFFER_LENGTH(buf));
+ if (qid.type != 0) {
+ printf("can't fetch %s\n", argv[0]);
+ do_clunk(nfid);
+ return;
}
- fetch_fid(1, l);
+ fetch_fid(nfid, l);
}
static void