commit - 1610d4872387cb3e06ec718fc70ddab17fa23bc8
commit + 02d5b425514494dff976f6ddedb6bf5514213cc1
blob - b9e9e26a6ba604b9615317316af4c55ae689459a
blob + 858e86c42ae0319bb1aa02b41e4ba3c6e73f69ac
--- kamiftp/ftp.c
+++ kamiftp/ftp.c
static int
fetch_fid(int fid, int fd, const char *name)
{
+ static char buf[MSIZE9P];
struct progress p = {0};
struct np_stat st;
size_t r;
int ret = 0;
- char buf[BUFSIZ];
do_stat(fid, &st);
do_open(fid, KOREAD);
p.max = st.length;
for (;;) {
- size_t off;
+ size_t len, off;
ssize_t nw;
- r = do_read(fid, p.done, sizeof(buf), buf);
+ len = MIN(sizeof(buf), msize);
+ len -= HEADERSIZE + 4; /* for the request' fields */
+
+ r = do_read(fid, p.done, len, buf);
if (r == 0)
break;
static void
send_fid(int fid, const char *fnam, int open_flags, int fd, const char *name)
{
+ static char buf[MSIZE9P];
struct progress p = {0};
struct stat sb;
ssize_t r;
- size_t w;
- char buf[BUFSIZ];
+ size_t w, len;
if (fstat(fd, &sb) == -1)
err(1, "fstat");
p.max = sb.st_size;
for (;;) {
- r = read(fd, buf, sizeof(buf));
+ len = MIN(sizeof(buf), msize);
+ len -= HEADERSIZE + 4 + 4 + 8; /* for the request' fields */
+
+ r = read(fd, buf, len);
if (r == 0)
break;
if (r == -1)