summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/upb_data.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/upb_data.h b/src/upb_data.h
index 7e24d7e..98243ce 100644
--- a/src/upb_data.h
+++ b/src/upb_data.h
@@ -27,6 +27,10 @@
#include "upb_atomic.h"
#include "upb_def.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct upb_msgdef;
struct upb_fielddef;
@@ -296,6 +300,13 @@ INLINE void upb_strcpyc(upb_strptr dest, const char *src) {
// Returns a new string whose contents are a copy of s.
upb_strptr upb_strdup(upb_strptr s);
+// Like upb_strdup(), but duplicates a given buffer and length.
+INLINE upb_strptr upb_strduplen(const void *src, upb_strlen_t len) {
+ upb_strptr s = upb_string_new();
+ upb_strcpylen(s, src, len);
+ return s;
+}
+
// Like upb_strdup(), but duplicates a C NULL-terminated string.
upb_strptr upb_strdupc(const char *src);
@@ -468,7 +479,8 @@ void _upb_msg_free(upb_msg *msg, struct upb_msgdef *md);
// INTERNAL-ONLY:
// Returns a pointer to the given field.
INLINE union upb_value_ptr _upb_msg_getptr(upb_msg *msg, struct upb_fielddef *f) {
- union upb_value_ptr p = {._void = &msg->data[f->byte_offset]};
+ union upb_value_ptr p;
+ p._void = &msg->data[f->byte_offset];
return p;
}
@@ -514,4 +526,8 @@ void upb_msgparser_reset(struct upb_msgparser *mp, upb_msg *m);
size_t upb_msgparser_parse(struct upb_msgparser *mp, upb_strptr str,
struct upb_status *status);
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
#endif
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback