From e03100060fd0ce4a2e3bded1042657ca1f3d536d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Wed, 29 Aug 2012 17:46:42 +0800 Subject: [PATCH] pbc bugfix --- lua-protobuf/register.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/lua-protobuf/register.c b/lua-protobuf/register.c index a1bf4280..c0f9f17e 100644 --- a/lua-protobuf/register.c +++ b/lua-protobuf/register.c @@ -10,8 +10,11 @@ #include static const char * -_concat_name(struct _stringpool *p , const char *prefix , int prefix_sz , const char *name , int name_sz) { +_concat_name(struct _stringpool *p , const char *prefix , int prefix_sz , const char *name , int name_sz, int *sz) { if (prefix_sz == 0) { + if (sz) { + *sz = name_sz; + } return _pbcS_build(p , name, name_sz); } char temp[name_sz + prefix_sz + 2]; @@ -19,7 +22,9 @@ _concat_name(struct _stringpool *p , const char *prefix , int prefix_sz , const temp[prefix_sz] = '.'; memcpy(temp+prefix_sz+1,name,name_sz); temp[name_sz + prefix_sz + 1] = '\0'; - + if (sz) { + *sz = name_sz + prefix_sz + 1; + } return _pbcS_build(p , temp, name_sz + prefix_sz + 1); } @@ -37,7 +42,7 @@ _register_enum(struct pbc_env *p, struct _stringpool *pool, struct pbc_rmessage } int name_sz; const char * name = pbc_rmessage_string(enum_type, "name", 0 , &name_sz); - const char *temp = _concat_name(pool, prefix , prefix_sz , name , name_sz); + const char *temp = _concat_name(pool, prefix , prefix_sz , name , name_sz, NULL); _pbcP_push_enum(p,temp,table,field_count); free(table); @@ -147,7 +152,7 @@ _register_extension(struct pbc_env *p, struct _stringpool *pool , const char * p int field_name_sz = 0; struct _field f; const char * field_name = pbc_rmessage_string(extension , "name" , 0, &field_name_sz); - f.name = _concat_name(pool, prefix, prefix_sz, field_name, field_name_sz); + f.name = _concat_name(pool, prefix, prefix_sz, field_name, field_name_sz, NULL); _register_field(extension, &f , pool); @@ -169,7 +174,8 @@ static void _register_message(struct pbc_env *p, struct _stringpool *pool, struct pbc_rmessage * message_type, const char *prefix, int prefix_sz, pbc_array queue) { int name_sz; const char * name = pbc_rmessage_string(message_type, "name", 0 , &name_sz); - const char *temp = _concat_name(pool, prefix , prefix_sz , name , name_sz); + int sz = 0; + const char *temp = _concat_name(pool, prefix , prefix_sz , name , name_sz, &sz); int field_count = pbc_rmessage_size(message_type, "field"); int i; @@ -187,7 +193,7 @@ _register_message(struct pbc_env *p, struct _stringpool *pool, struct pbc_rmessa _pbcP_init_message(p, temp); - _register_extension(p, pool, temp, prefix_sz + name_sz + 1,message_type, queue); + _register_extension(p, pool, temp, sz,message_type, queue); // nested enum @@ -195,14 +201,14 @@ _register_message(struct pbc_env *p, struct _stringpool *pool, struct pbc_rmessa for (i=0;i