commit - 424338c25a4f53a85d832acd81761de9857e88e7
commit + 02571aa1629b9b5c719efd01e80dfd26b96db27e
blob - c6d43653826cba945951b69e51ca1d0b9013d135
blob + a205d6b295360cd36e7c40e6572f08d5a299f20c
--- kamiftp/ftp.c
+++ kamiftp/ftp.c
fflush(stdout);
}
-static void
+static int
fetch_fid(int fid, int fd, const char *name)
{
struct progress p = {0};
struct np_stat st;
size_t r;
+ int ret = 0;
char buf[BUFSIZ];
do_stat(fid, &st);
for (off = 0; off < r; off += nw)
if ((nw = write(fd, buf + off, r - off)) == 0 ||
- nw == -1)
- err(1, "write");
+ nw == -1) {
+ ret = -1;
+ goto end;
+ }
p.done += r;
draw_progress(name, &p);
#endif
}
+end:
putchar('\n');
do_clunk(fid);
+ return ret;
}
static void
strlcpy(p, *argv, sizeof(p));
name = basename(p);
- fetch_fid(nfid, tmpfd, name);
+ if (fetch_fid(nfid, tmpfd, name)) {
+ warn("failed fetch or can't write %s", sfn);
+ goto end;
+ }
close(tmpfd);
spawn(ed, sfn, NULL);
return;
}
- fetch_fid(nfid, fd, l);
+ if (fetch_fid(nfid, fd, l) == -1)
+ warn("write %s", l);
close(fd);
}
cmd_page(int argc, const char **argv)
{
struct qid qid;
- int nfid, tmpfd, miss;
+ int nfid, tmpfd, miss, r;
char sfn[TMPFSTRLEN], p[PATH_MAX], *name, *errstr;
const char *pager;
strlcpy(p, *argv, sizeof(p));
name = basename(p);
- fetch_fid(nfid, tmpfd, name);
+ if ((r = fetch_fid(nfid, tmpfd, name)) == -1)
+ warn("write %s", sfn);
close(tmpfd);
- spawn(pager, sfn, NULL);
+ if (r != -1)
+ spawn(pager, sfn, NULL);
unlink(sfn);
}