diff options
Diffstat (limited to 'TAO/tao/DynAny_i.cpp')
-rw-r--r-- | TAO/tao/DynAny_i.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/TAO/tao/DynAny_i.cpp b/TAO/tao/DynAny_i.cpp index 31e4c676080..0df5b4fda22 100644 --- a/TAO/tao/DynAny_i.cpp +++ b/TAO/tao/DynAny_i.cpp @@ -424,18 +424,17 @@ TAO_DynAny_i::insert_reference (CORBA::Object_ptr value, if (kind == CORBA::tk_objref) { - CORBA::Object_ptr *_tao_object_ptr; - - ACE_NEW (_tao_object_ptr, - CORBA::Object_ptr); - - *_tao_object_ptr = CORBA::Object::_duplicate (value); - - this->value_.replace (this->value_.type (), - (void*)_tao_object_ptr, - 1, - ACE_TRY_ENV); - ACE_CHECK; + CORBA::Object_var obj = CORBA::Object::_duplicate (value); + + TAO_OutputCDR stream; + if (!(stream << obj.in ())) + ACE_THROW (CORBA::MARSHAL ()); + this->value_._tao_replace (this->value_.type (), + TAO_ENCAP_BYTE_ORDER, + stream.begin (), + 1, + obj._retn (), + CORBA::Object::_tao_any_destructor); } else { @@ -668,12 +667,11 @@ TAO_DynAny_i::get_double (CORBA::Environment &ACE_TRY_ENV) char * TAO_DynAny_i::get_string (CORBA::Environment &ACE_TRY_ENV) { - CORBA::Char *val; + const char *val; if (!(this->value_ >>= val)) { - ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), - val); + ACE_THROW_RETURN (CORBA_DynAny::TypeMismatch (), 0); } return CORBA::string_dup (val); |