[omniORB] copying strings

Joan Ramon López Gillué jrlopez@visionadvance.com
Mon, 23 Apr 2001 11:26:29 +0200


Attila,

I thought it should work as it was, but it did not. You are right, it
crashes when it releases the old buffer. By now, the only workaround I've
found is casting the variable to a (const char*) and not usig string_dup.

	(*name)[0].kind = (const char*) nameBuf;

It seems to work fine this way.

Thanks a lot

Joan Ramon Lopez
Vision Advance.SL
Barcelona (Spain)


-----Original Message-----
From: Attila.Pletyak@anemo.com [mailto:Attila.Pletyak@anemo.com]
Sent: lunes, 23 de abril de 2001 11:13
To: Joan Ramon López Gillué
Cc: omniorb-list@uk.research.att.com
Subject: Re: [omniORB] copying strings



The difference between the two lines is that the string_dup in the second
one dinamically allocates store and gives a char* to the kind member. Now,
in the first line the String_member copies the given char string into
itself, in the second line it simply takes the char* pointer and uses it.
It should work. However when you make length(2) a copying of buffers and
releasing old buffers starts and maybe that is causing a segmentation
fault.

Can't you solve somehow to give const char * as a right value to the kind
member?

Sincerely,

Attila Pletyak
Anemo Ltd.



                    Joan Ramon López Gillué
                    <jrlopez@visionadvance.com>         To:
<omniorb-list@uk.research.att.com>
                    Sent by:                            cc:
                    owner-omniorb-list@uk.resear        Subject:
[omniORB] copying strings
                    ch.att.com


                    04/22/01 03:51 PM





Hello everybody,

Please, can anybody tell me what am I doing wrong in thye following
fragment
of code?

The problem is with copyinn nameBuf over (*name)[0].kind. If instead of
copying nameBuf, I copy a (const char *), as in the previous line,
everything works fine.


#include <omniORB3/CORBA.h>

void main(int argc, char** argv) {

           CosNaming::Name* name;
           char nameBuf[15]="Hola";

           name = new CosNaming::Name(0);

           name->length(1);
           (*name)[0].id = (const char*)"id0";
           (*name)[0].kind = CORBA::string_dup(&(nameBuf[0]));

           name->length(2);                    // it crashes here !!!

           etc...
}


Many thanks in advance

Joan Ramon Lopez Gillue