commit 1bb1bfca8878efcab2568f1f41e010e0be1f5e24 from: Omar Polo date: Sun Jan 16 11:08:21 2022 UTC convert dup_fid to return an error string too commit - 43d117b11c4c66b698f136129c597c051c69f6a3 commit + 1bb1bfca8878efcab2568f1f41e010e0be1f5e24 blob - 1401f83be897be2085fae1ceff14d781238fcc44 blob + 7b2755a8c648c74994efabb1de0a73f70ef6e010 --- kamiftp/ftp.c +++ kamiftp/ftp.c @@ -474,20 +474,25 @@ do_clunk(uint32_t fid) ASSERT_EMPTYBUF(); } -static void +static char * dup_fid(int fid, int nfid) { uint16_t nwqid; + char *errstr; twalk(fid, nfid, NULL, 0); do_send(); recv_msg(); - expect2(Rwalk, iota_tag); + if ((errstr = check(Rwalk, iota_tag)) != NULL) + return errstr; + nwqid = np_read16(buf); assert(nwqid == 0); ASSERT_EMPTYBUF(); + + return NULL; } static char * @@ -907,14 +912,19 @@ cmd_ls(int argc, const char **argv) struct np_stat st; uint64_t off = 0; uint32_t len; - char fmt[FMT_SCALED_STRSIZE]; + char fmt[FMT_SCALED_STRSIZE], *errstr; if (argc != 0) { printf("ls don't take arguments (yet)\n"); return; } - dup_fid(pwdfid, 1); + if ((errstr = dup_fid(pwdfid, 1)) != NULL) { + printf(".: %s\n", errstr); + free(errstr); + return; + } + do_open(1, KOREAD); evbuffer_drain(dirbuf, EVBUFFER_LENGTH(dirbuf));