static bool
blob_buffer_grow(struct blob_buf *buf, int minlen)
{
- buf->buflen += ((minlen / 256) + 1) * 256;
+ int delta = ((minlen / 256) + 1) * 256;
+ buf->buflen += delta;
buf->buf = realloc(buf->buf, buf->buflen);
+ if (buf->buf)
+ memset(buf->buf + buf->buflen - delta, 0, delta);
return !!buf->buf;
}
return 0;
}
+void
+blob_buf_free(struct blob_buf *buf)
+{
+ free(buf->buf);
+ buf->buf = NULL;
+ buf->buflen = 0;
+}
+
struct blob_attr *
blob_new(struct blob_buf *buf, int id, int payload)
{
return false;
}
- if (type == BLOB_ATTR_STRING && data[len] != 0)
+ if (type == BLOB_ATTR_STRING && data[len - 1] != 0)
return false;
return true;
}
return found;
}
+
+bool
+blob_attr_equal(const struct blob_attr *a1, const struct blob_attr *a2)
+{
+ if (!a1 && !a2)
+ return true;
+
+ if (!a1 || !a2)
+ return false;
+
+ if (blob_pad_len(a1) != blob_pad_len(a2))
+ return false;
+
+ return !memcmp(a1, a2, blob_pad_len(a1));
+}