summaryrefslogtreecommitdiff
path: root/TAO/tao/append.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/append.cpp')
-rw-r--r--TAO/tao/append.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/TAO/tao/append.cpp b/TAO/tao/append.cpp
index 8bec4e4467b..e380ddeb30f 100644
--- a/TAO/tao/append.cpp
+++ b/TAO/tao/append.cpp
@@ -23,8 +23,11 @@
#include "tao/CDR.h"
#include "tao/Environment.h"
#include "tao/Any.h"
-#include "tao/ValueBase.h"
#include "tao/debug.h"
+#include "tao/Valuetype_Adapter.h"
+#include "tao/ORB_Core.h"
+
+#include "ace/Dynamic_Service.h"
ACE_RCSID (tao,
append,
@@ -1190,12 +1193,23 @@ TAO_Marshal_Value::append (CORBA::TypeCode_ptr tc,
return CORBA::TypeCode::TRAVERSE_STOP;
}
+ TAO_Valuetype_Adapter *adapter =
+ ACE_Dynamic_Service<TAO_Valuetype_Adapter>::instance (
+ TAO_ORB_Core::valuetype_adapter_name ()
+ );
+
+ if (adapter == 0)
+ {
+ ACE_THROW_RETURN (CORBA::INTERNAL (),
+ CORBA::TypeCode::TRAVERSE_STOP);
+ }
+
if (value_tag == 0) // Null value type pointer.
{
//We are done.
return retval;
}
- else if (value_tag & TAO_OBV_GIOP_Flags::Type_info_single)
+ else if (value_tag & adapter->type_info_single ())
{
// Append repository id which is of type string.
dest->append_string (*src);
@@ -1210,6 +1224,7 @@ TAO_Marshal_Value::append (CORBA::TypeCode_ptr tc,
// Handle our base valuetype if any.
param = tc->concrete_base_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+
if (param->kind () != CORBA::tk_null)
{
retval = this->append (param.in (),