summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2009-07-21 10:41:40 -0700
committerJoshua Haberman <joshua@reverberate.org>2009-07-21 10:41:40 -0700
commitd7632d271cfda0d001d4373dd9884d21720d2f36 (patch)
tree5e6cdc015a25fa03947fa5f713b42f571433de41 /src
parentcbc05553c974af3774222c92844bd62c88e7f8ae (diff)
Pass pointer to tag instead of by value.
Diffstat (limited to 'src')
-rw-r--r--src/upb_msg.c6
-rw-r--r--src/upb_parse.h10
2 files changed, 6 insertions, 10 deletions
diff --git a/src/upb_msg.c b/src/upb_msg.c
index a923bb8..5d36c01 100644
--- a/src/upb_msg.c
+++ b/src/upb_msg.c
@@ -247,12 +247,12 @@ void upb_msg_reuse_submsg(void **msg, struct upb_msg *m)
/* Serialization/Deserialization. ********************************************/
-static upb_field_type_t tag_cb(void *udata, struct upb_tag tag,
+static upb_field_type_t tag_cb(void *udata, struct upb_tag *tag,
void **user_field_desc)
{
struct upb_msg_parse_state *s = udata;
- struct upb_msg_field *f = upb_msg_fieldbynum(s->top->m, tag.field_number);
- if(!f || !upb_check_type(tag.wire_type, f->type))
+ struct upb_msg_field *f = upb_msg_fieldbynum(s->top->m, tag->field_number);
+ if(!f || !upb_check_type(tag->wire_type, f->type))
return 0; /* Skip unknown or fields of the wrong type. */
*user_field_desc = f;
return f->type;
diff --git a/src/upb_parse.h b/src/upb_parse.h
index 8975052..0a290a4 100644
--- a/src/upb_parse.h
+++ b/src/upb_parse.h
@@ -87,7 +87,7 @@ void upb_parse_free(struct upb_parse_state *state);
* skipping all submessages, in the case of a submessage), the callback should
* return zero. */
typedef upb_field_type_t (*upb_tag_cb)(void *udata,
- struct upb_tag tag,
+ struct upb_tag *tag,
void **user_field_desc);
/* The callback that is called when a regular value (ie. not a string or
@@ -133,13 +133,9 @@ upb_status_t upb_parse(struct upb_parse_state *s, void *buf, size_t len,
extern upb_wire_type_t upb_expected_wire_types[];
/* Returns true if wt is the correct on-the-wire type for ft. */
INLINE bool upb_check_type(upb_wire_type_t wt, upb_field_type_t ft) {
- if(ft == 10) { // GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_GROUP)
- return wt == UPB_WIRE_TYPE_START_GROUP;
- } else {
/* With packed arrays, anything can be delimited (except groups). */
- return wt == UPB_WIRE_TYPE_DELIMITED ||
- upb_type_info[ft].expected_wire_type == wt;
- }
+ return (wt == UPB_WIRE_TYPE_DELIMITED) || upb_type_info[ft].expected_wire_type == wt;
+ ; // && ft != GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_GROUP );
}
/* Data-consuming functions (to be called from value cb). *********************/
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback