Code

proto: Let unmarshal functions return the number of bytes processed.
[sysdb.git] / src / client / sock.c
index bed6fc0ff0b6d20aff605f4f0a1c4b466435b3e8..0d734f3a9462ba74bb7405beb94c9fdeecb67d8a 100644 (file)
@@ -306,12 +306,13 @@ sdb_client_recv(sdb_client_t *client,
                if (rstatus == UINT32_MAX) {
                        const char *str = sdb_strbuf_string(buf) + data_offset;
                        size_t len = sdb_strbuf_len(buf) - data_offset;
+                       ssize_t n;
 
                        /* retrieve status and data len */
                        assert(len >= 2 * sizeof(uint32_t));
-                       rstatus = sdb_proto_unmarshal_int32(str, len);
-                       rlen = sdb_proto_unmarshal_int32(str + sizeof(rstatus),
-                                       len - sizeof(rstatus));
+                       n = sdb_proto_unmarshal_int32(str, len, &rstatus);
+                       str += n; len -= (size_t)n;
+                       sdb_proto_unmarshal_int32(str, len, &rlen);
 
                        if (! rlen)
                                break;