@@ -181,20 +181,25 @@ static void pprint_stat(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name)
static void pprint_strs(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name)
{
+ int sg_count = get_sg_count(pdu, rx);
struct iovec *sg = get_sg(pdu, rx);
size_t offset = *offsetp;
- int16_t count, i;
+ uint16_t tmp_count, count, i;
+ size_t copied = 0;
fprintf(llogfile, "%s={", name);
- BUG_ON((offset + 2) > sg[0].iov_len);
- memcpy(&count, sg[0].iov_base + offset, 2);
- offset += 2;
+ /* Get the count */
+ copied = do_pdu_unpack(&tmp_count, sg, sg_count, offset, sizeof(tmp_count));
+ BUG_ON(copied != sizeof(tmp_count));
+ count = le16_to_cpupu(&tmp_count);
+ offset += copied;
for (i = 0; i < count; i++) {
char str[512];
- if (i)
+ if (i) {
fprintf(llogfile, ", ");
+ }
snprintf(str, sizeof(str), "[%d]", i);
pprint_str(pdu, rx, &offset, str);
}
@@ -206,20 +211,24 @@ static void pprint_strs(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name)
static void pprint_qids(V9fsPDU *pdu, int rx, size_t *offsetp, const char *name)
{
+ int sg_count = get_sg_count(pdu, rx);
struct iovec *sg = get_sg(pdu, rx);
size_t offset = *offsetp;
- int16_t count, i;
+ uint16_t tmp_count, count, i;
+ size_t copied = 0;
fprintf(llogfile, "%s={", name);
- BUG_ON((offset + 2) > sg[0].iov_len);
- memcpy(&count, sg[0].iov_base + offset, 2);
- offset += 2;
+ copied = do_pdu_unpack(&tmp_count, sg, sg_count, offset, sizeof(tmp_count));
+ BUG_ON(copied != sizeof(tmp_count));
+ count = le16_to_cpupu(&tmp_count);
+ offset += copied;
for (i = 0; i < count; i++) {
char str[512];
- if (i)
+ if (i) {
fprintf(llogfile, ", ");
+ }
snprintf(str, sizeof(str), "[%d]", i);
pprint_qid(pdu, rx, &offset, str);
}