Commit Diff


commit - be727c17aab457ecfb1acc981c5fb82d2dc82c52
commit + 52586771172ed747dd0e1952283dbee9d3400448
blob - ec308e7d2c2e0b57472d3c6577f4e9dc8d9d7899
blob + 7279a2c3a790771058c99a9f80566975f032170a
--- ftp.c
+++ ftp.c
@@ -729,7 +729,9 @@ cmd_cd(int argc, const char **argv)
 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");
@@ -738,24 +740,24 @@ cmd_get(int argc, const char **argv)
 
 	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