Thank you very much Dave for your quick and detailed replies
I'll try that out soon.

Aviad

On 1 דצמבר, 04:50, daveb <[EMAIL PROTECTED]> wrote:
> BTW: I just released protobuf-c 0.6 which include the item__init()
> function (and it also supports default-values properly now).
>
> - dave
>
> On Nov 27, 7:48 pm, daveb <[EMAIL PROTECTED]> wrote:
>
>
>
> > I should mention too:  I plan to eventually add a generated function
> > "item__init(Item *)" to initialize a message.  i plan to add this when
> > i fix default values for non-fundamental types (which are currently
> > ignored).
>
> > (i haven't had a huge amount of time to deal with these few niggling
> > issues, but i've now got the design in my head, and the coding should
> > be pretty easy)
>
> > - dave
>
> > On Nov 27, 7:42 pm, daveb <[EMAIL PROTECTED]> wrote:
>
> > > The reason why it is crashing is that all messages have a few builtin
> > > members that are usually initialized via ITEM__INIT.  If you look at
> > > the generated Item it looks like:
> > >   struct _Item
> > >   {
> > >      ProtobufCMessage base_message;
> > >      uint32_t id;
> > >   };
> > > The best way to construct a message is to use C's assignment
> > > operator.  Rewriting your code strictly:
> > >     LookupReply nlr = LOOKUP_REPLY__INIT;
> > >     Item item = ITEM__INIT;
>
> > >     (&nlr)->replica_list = (Item**)malloc(1*sizeof(Item*));
> > >     (&nlr)->n_replica_list = 1;
>
> > >     Item* item1 = (Item*)malloc(sizeof(Item));
> > >     item.id = 1;
> > >     *item1 = item;
> > >     (&nlr)->replica_list[0] = item1;
>
> > >     int len = lookup_reply__get_packed_size(nlr);
>
> > > But that's kind of overkill in a way, it's shorter just to write:
> > >     LookupReply nlr = LOOKUP_REPLY__INIT;
> > >     Item item1 = ITEM__INIT;
> > >     Item *items[1] = { &item };
>
> > >     nlr.n_replica_list = 1;
> > >     nlr.replica_list = items;
> > >     item1.id = 1;
> > >     int len = lookup_reply__get_packed_size(&nlr);
> > > Furthermore, using the latter approach, you can avoid malloc(), and
> > > therefore (most of) the possibility of memory leaks.
>
> > > On Nov 25, 8:54 am, [EMAIL PROTECTED] wrote:
>
> > > > Hi,
>
> > > > I'm using the protocol buffers package for c. It's very useful and
> > > > handy. However I've encountered a problem when trying to use a message
> > > > with a nested repeated field of an other message type.
>
> > > > This is the simplified version -
> > > > message Item {
> > > >         int32 id = 1;
>
> > > > }
>
> > > > message LookupReply {
> > > >         repeated Item replica_list = 1;
>
> > > > }
>
> > > > Here is the code for constructing the message:
> > > > ...
> > > >     LookupReply nlr = LOOKUP_REPLY__INIT;
>
> > > >     (&nlr)->replica_list = (Item**)malloc(1*sizeof(Item*));
> > > >     (&nlr)->n_replica_list = 1;
>
> > > >     Item* item1 = (Item*)malloc(sizeof(Item));
> > > >     item1->id = 1;
> > > >     (&nlr)->replica_list[0] = item1;
>
> > > >     int len = lookup_reply__get_packed_size(nlr);
> > > > ...
>
> > > > The call to lookup_reply__get_packed_size causes a segmentation
> > > > fault.
> > > > I first tried using a string id field in the Item message, and that
> > > > failed too.
>
> > > > However when I used a string repeated field (with a few obvious
> > > > semantic changes) everything worked fine.
>
> > > > Anyone else has maybe used repeated message field in the c package and
> > > > got it to work (or if not, can explain why it doesn't work)?
>
> > > > Thank you,
> > > >Aviad-הסתר טקסט מצוטט-
>
> -הראה טקסט מצוטט-
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to