X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=blobdiff_plain;f=blob.h;h=37a572b0974940d1739590ea08a32d4d3c1d7e0e;hp=88ee01cc21b40312f82ad5238d1d4fd8a10be751;hb=58aec3c59a53147c7d924c823f7405218fb5f555;hpb=ef9b6b92df223e783a365f34998bc0f299b977f2 diff --git a/blob.h b/blob.h index 88ee01c..37a572b 100644 --- a/blob.h +++ b/blob.h @@ -28,6 +28,8 @@ #include "utils.h" +#define BLOB_COOKIE 0x01234567 + enum { BLOB_ATTR_UNSPEC, BLOB_ATTR_NESTED, @@ -40,10 +42,11 @@ enum { BLOB_ATTR_LAST }; -#define BLOB_ATTR_ID_MASK 0xff000000 +#define BLOB_ATTR_ID_MASK 0x7f000000 #define BLOB_ATTR_ID_SHIFT 24 #define BLOB_ATTR_LEN_MASK 0x00ffffff #define BLOB_ATTR_ALIGN 4 +#define BLOB_ATTR_EXTENDED 0x80000000 struct blob_attr { uint32_t id_len; @@ -83,6 +86,12 @@ blob_id(const struct blob_attr *attr) return id; } +static inline bool +blob_is_extended(const struct blob_attr *attr) +{ + return !!(attr->id_len & cpu_to_be32(BLOB_ATTR_EXTENDED)); +} + /* * blob_len: returns the length of the attribute's payload */ @@ -190,6 +199,7 @@ extern struct blob_attr *blob_put(struct blob_buf *buf, int id, const void *ptr, extern bool blob_check_type(const void *ptr, int len, int type); extern int blob_parse(struct blob_attr *attr, struct blob_attr **data, const struct blob_attr_info *info, int max); extern struct blob_attr *blob_memdup(struct blob_attr *attr); +extern struct blob_attr *blob_put_raw(struct blob_buf *buf, const void *ptr, int len); static inline struct blob_attr * blob_put_string(struct blob_buf *buf, int id, const char *str)