commit - c234caae8bdf0b2be5ee26fee87f0fcbf0d95488
commit + f9d8661b68f61636701e3320cafaf5853db70123
blob - a906118a4be90368060771d0784128b29cb69255
blob + 602fa1a38bbd3bd9ae043608eacf421054cc6049
--- kamid/client.c
+++ kamid/client.c
static void topen(struct np_msg_header *, const uint8_t *, size_t);
static void tcreate(struct np_msg_header *, const uint8_t *, size_t);
static void tread(struct np_msg_header *, const uint8_t *, size_t);
-static void twrite(struct np_msg_header *, const uint8_t *, size_t, struct fid **, off_t *, size_t *, int *);
-static void twrite_cont(struct fid *, off_t *, size_t *, int *, uint16_t, const uint8_t *, size_t);
+static void twrite(struct np_msg_header *, const uint8_t *, size_t, struct fid **, off_t *, size_t *, size_t *, int *);
+static void twrite_cont(struct fid *, off_t *, size_t *, size_t *, int *, uint16_t, const uint8_t *, size_t);
static void tstat(struct np_msg_header *, const uint8_t *, size_t);
static void twstat(struct np_msg_header *, const uint8_t *, size_t);
static void tremove(struct np_msg_header *, const uint8_t *, size_t);
static void
twrite(struct np_msg_header *hdr, const uint8_t *data, size_t len,
- struct fid **writefid, off_t *writepos, size_t *writeleft, int *writeskip)
+ struct fid **writefid, off_t *writepos, size_t *writetot,
+ size_t *writeleft, int *writeskip)
{
struct fid *f;
ssize_t r;
if (count > len) {
*writefid = f;
*writepos = off + len;
+ *writetot = len;
*writeleft = count - len;
*writeskip = 0;
}
}
static void
-twrite_cont(struct fid *f, off_t *writepos, size_t *writeleft, int *writeskip,
- uint16_t tag, const uint8_t *data, size_t len)
+twrite_cont(struct fid *f, off_t *writepos, size_t *writetot,
+ size_t *writeleft, int *writeskip, uint16_t tag, const uint8_t *data,
+ size_t len)
{
ssize_t r;
return;
}
+ *writetot += len;
*writeleft -= len;
*writepos += len;
if (*writeleft == 0)
- np_write(tag, r);
+ np_write(tag, *writetot);
}
static void
{
static struct fid *writefid;
static off_t writepos;
+ static size_t writetot;
static size_t writeleft;
static int writeskip;
static uint16_t writetag;
return;
}
- log_warnx("continuing...");
- twrite_cont(writefid, &writepos, &writeleft, &writeskip,
- writetag, imsg->data, len);
+ twrite_cont(writefid, &writepos, &writetot, &writeleft,
+ &writeskip, writetag, imsg->data, len);
return;
}
writefid = NULL;
writepos = -1;
+ writetot = 0;
writeleft = 0;
writeskip = 0;
if (hdr.type == Twrite) {
writetag = hdr.tag;
- twrite(&hdr, data, len, &writefid, &writepos, &writeleft,
- &writeskip);
+ twrite(&hdr, data, len, &writefid, &writepos, &writetot,
+ &writeleft, &writeskip);
return;
}