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)
{
};
bool
-blob_check_type(void *ptr, int len, int type)
+blob_check_type(const void *ptr, int len, int type)
{
- char *data = ptr;
+ const char *data = ptr;
if (type >= BLOB_ATTR_LAST)
return false;
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));
+}