Allow an arbitrarily-sized buffer into the key/value message.
[cascardo/rnetclient.git] / rnet_message.c
index 124fa4c..e9a6345 100644 (file)
@@ -67,6 +67,7 @@ static int add_field(struct rnet_message **message, char *key, int klen,
        if ((msg->alen - msg->len) < (klen + vlen + 3)) {
                if (rnet_message_expand(message, MAX(msg->len, klen + vlen + 3)))
                        return -ENOMEM;
+               msg = *message;
        }
        buffer = msg->buffer + msg->len;
        if (klen > 0x7f || klen < 0)
@@ -124,3 +125,9 @@ int rnet_message_add_u64(struct rnet_message **msg, char *key, uint64_t val)
        uint64_t nval = htobe64(val);
        return add_field(msg, key, strlen(key), (char *) &nval, sizeof(val));
 }
+
+int rnet_message_add_buffer(struct rnet_message **msg, char *key,
+                               char *buffer, size_t len)
+{
+       return add_field(msg, key, strlen(key), buffer, len);
+}