summaryrefslogtreecommitdiff
path: root/TAO/tao/DynAny_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/DynAny_i.cpp')
-rw-r--r--TAO/tao/DynAny_i.cpp28
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);