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.cpp616
1 files changed, 326 insertions, 290 deletions
diff --git a/TAO/tao/append.cpp b/TAO/tao/append.cpp
index 475577f159a..f380e853eac 100644
--- a/TAO/tao/append.cpp
+++ b/TAO/tao/append.cpp
@@ -38,7 +38,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Primitive::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::Boolean continue_append = 1;
CORBA::TypeCode::traverse_status retval =
@@ -85,58 +85,54 @@ TAO_Marshal_Primitive::append (CORBA::TypeCode_ptr tc,
if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE
&& continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_Primitive::append detected error\n"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_Primitive::append detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
CORBA::TypeCode::traverse_status
TAO_Marshal_Any::append (CORBA::TypeCode_ptr,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
// Typecode of the element that makes the Any.
- CORBA::TypeCode_var elem_tc;
+ CORBA::TypeCode_ptr elem_tc;
// Status of append operation.
+ CORBA::TypeCode::traverse_status retval =
+ CORBA::TypeCode::TRAVERSE_CONTINUE;
+
// Decode the typecode description for the element so that we can append the
// data appropriately
- CORBA::TypeCode::traverse_status retval =
- src->decode (CORBA::_tc_TypeCode,
- &elem_tc.inout (),
- 0,
- ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
- if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ if ((retval = src->decode (CORBA::_tc_TypeCode,
+ &elem_tc,
+ 0,
+ env))
+ == CORBA::TypeCode::TRAVERSE_CONTINUE)
{
// encode the typecode
- retval = dest->encode (CORBA::_tc_TypeCode, &elem_tc, 0, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ retval = dest->encode (CORBA::_tc_TypeCode, &elem_tc, 0, env);
if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
{
// append the data
- retval = dest->append (elem_tc.in (), src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ retval = dest->append (elem_tc, src, env);
+ CORBA::release (elem_tc);
}
}
-
if (retval != CORBA::TypeCode::TRAVERSE_CONTINUE)
{
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_Marshal_Any::append detected error\n"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ CORBA::release (elem_tc);
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
}
-
return retval;
}
@@ -144,7 +140,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_TypeCode::append (CORBA::TypeCode_ptr,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::Boolean continue_append = 1;
CORBA::TypeCode::traverse_status retval =
@@ -175,8 +171,7 @@ TAO_Marshal_TypeCode::append (CORBA::TypeCode_ptr,
case CORBA::tk_wstring:
{
// read and write the bounds
- retval = dest->append (CORBA::_tc_long, src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ retval = dest->append (CORBA::_tc_long, src, env);
}
break;
@@ -184,8 +179,7 @@ TAO_Marshal_TypeCode::append (CORBA::TypeCode_ptr,
case ~0u:
{
// read and write the negative offset
- retval = dest->append (CORBA::_tc_long, src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ retval = dest->append (CORBA::_tc_long, src, env);
}
break;
@@ -201,8 +195,7 @@ TAO_Marshal_TypeCode::append (CORBA::TypeCode_ptr,
case CORBA::tk_except:
{
// write the encapsulation i.e., octet sequence
- retval = dest->append (TC_opaque, src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ retval = dest->append (TC_opaque, src, env);
}
} // end of switch
}
@@ -212,23 +205,22 @@ TAO_Marshal_TypeCode::append (CORBA::TypeCode_ptr,
ACE_DEBUG ((LM_DEBUG,
"TAO_Marshal_TypeCode: "
"Bad kind_ value in CDR stream\n"));
-
- ACE_THROW_RETURN (CORBA::BAD_TYPECODE (),
- CORBA::TypeCode::TRAVERSE_STOP);
+ env.exception (new CORBA::BAD_TYPECODE ());
+ return CORBA::TypeCode::TRAVERSE_STOP;
}
}
if ((continue_append == 1) &&
(retval == CORBA::TypeCode::TRAVERSE_CONTINUE))
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_TypeCode::append detected error\n"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_TypeCode::append detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// Encode Principal.
@@ -237,17 +229,17 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Principal::append (CORBA::TypeCode_ptr,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
// write the octet sequence representing the Principal
- return dest->append (TC_opaque, src, ACE_TRY_ENV);
+ return dest->append (TC_opaque, src, env);
}
CORBA::TypeCode::traverse_status
TAO_Marshal_ObjRef::append (CORBA::TypeCode_ptr,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::Boolean continue_append = 1;
@@ -264,7 +256,7 @@ TAO_Marshal_ObjRef::append (CORBA::TypeCode_ptr,
// just need to be able to access such preloaded libraries here as
// we unmarshal objrefs.
- CORBA::ULong profiles = 0;
+ CORBA::ULong profiles;
// get the count of profiles that follow. This will tell us the length of the
// sequence
@@ -274,39 +266,38 @@ TAO_Marshal_ObjRef::append (CORBA::TypeCode_ptr,
// No profiles means a NIL objref.
while (profiles-- != 0 && continue_append)
{
- CORBA::ULong tag = 0;
+ CORBA::ULong tag;
// get the profile ID tag
if ((continue_append = (src->read_ulong (tag) ?
dest->write_ulong (tag) : 0)) == 0)
continue;
- CORBA::ULong length = 0;
+ CORBA::ULong length;
if ((continue_append = (src->read_ulong (length)
? dest->write_ulong (length) : 0)) == 0)
continue;
// @@ This can be optimized! Pre-allocating on the destination
// and then copying directly into that.
- CORBA::Octet* body = 0;
- ACE_NEW_RETURN (body,
- CORBA::Octet[length],
+ CORBA::Octet* body;
+ ACE_NEW_RETURN (body, CORBA::Octet[length],
CORBA::TypeCode::TRAVERSE_STOP);
continue_append = (src->read_octet_array (body, length)
? dest->write_octet_array (body, length)
: 0);
- delete [] body;
+ delete[] body;
}
if (continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG, "TAO_Marshal_ObjRef::append detected error\n"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG, "TAO_Marshal_ObjRef::append detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// Decode structs.
@@ -314,7 +305,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Struct::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::TypeCode::traverse_status retval =
CORBA::TypeCode::TRAVERSE_CONTINUE;
@@ -322,33 +313,37 @@ TAO_Marshal_Struct::append (CORBA::TypeCode_ptr tc,
CORBA::TypeCode_ptr param;
// Number of fields in the struct.
- int member_count = tc->member_count (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- for (int i = 0; i < member_count
- && retval == CORBA::TypeCode::TRAVERSE_CONTINUE
- && continue_append == 1;
- i++)
- {
- // get member type
- param = tc->member_type (i, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- retval = dest->append (param, src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
- }
+ int member_count = tc->member_count (env);
+
+ if (env.exception () == 0)
+ for (int i = 0; i < member_count
+ && retval == CORBA::TypeCode::TRAVERSE_CONTINUE
+ && continue_append == 1;
+ i++)
+ {
+ // get member type
+ param = tc->member_type (i, env);
+ if (env.exception () == 0)
+ {
+ retval = dest->append (param, src, env);
+ }
+ else
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
+ else
+ return CORBA::TypeCode::TRAVERSE_STOP;
if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE
&& continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_Struct::encode detected error\n"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_Struct::encode detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// Encode unions.
@@ -356,7 +351,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Union::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::TypeCode::traverse_status retval =
CORBA::TypeCode::TRAVERSE_CONTINUE;
@@ -364,7 +359,7 @@ TAO_Marshal_Union::append (CORBA::TypeCode_ptr tc,
CORBA::TypeCode_ptr discrim_tc;
CORBA::TypeCode_ptr member_tc;
CORBA::Any_ptr member_label;
- CORBA::ULongLong discrim_val;
+ CORBA::Long discrim_val;
CORBA::ULong member_count;
CORBA::Long default_index;
CORBA::ULong i;
@@ -372,143 +367,174 @@ TAO_Marshal_Union::append (CORBA::TypeCode_ptr tc,
CORBA::Boolean discrim_matched = 0;
// get the discriminator type
- discrim_tc = tc->discriminator_type (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ discrim_tc = tc->discriminator_type (env);
- // decode the discriminator value
- retval = src->decode (discrim_tc, &discrim_val, 0, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
- if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ if (env.exception () == 0)
{
- // write the discriminant back to the dest
- retval = dest->encode (discrim_tc, &discrim_val, 0, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ // decode the discriminator value
+ retval = src->decode (discrim_tc, &discrim_val, 0, env);
if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
{
- // now get ready to marshal the actual union value
- default_index = tc->default_index (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- member_count = tc->member_count (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- // check which label value matches with the discriminator
- // value. Accordingly, marshal the corresponding
- // member_type. If none match, check if default exists
- // and marshal accordingly. Otherwise it is an error.
-
- for (i = 0; member_count-- != 0; i++)
+ // write the discriminant back to the dest
+ retval = dest->encode (discrim_tc, &discrim_val, 0, env);
+ if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
{
- member_label = tc->member_label (i, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ // now get ready to marshal the actual union value
+ default_index = tc->default_index (env);
- CORBA::TypeCode_var type = member_label->type ();
- // do the matching
- switch (type->kind (ACE_TRY_ENV))
+ if (env.exception () == 0)
{
- case CORBA::tk_short:
- {
- CORBA::Short s;
- *member_label >>= s;
- if (s == *(CORBA::Short *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_ushort:
- {
- CORBA::UShort s;
- *member_label >>= s;
- if (s == *(CORBA::UShort *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_long:
- {
- CORBA::Long l;
- *member_label >>= l;
- if (l == *(CORBA::Long *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_ulong:
- {
- CORBA::ULong l;
- *member_label >>= l;
- if (l == *(CORBA::ULong *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_enum:
- {
- CORBA::Long l;
- TAO_InputCDR stream (member_label->_tao_get_cdr ());
- (void)stream.decode (discrim_tc, &l, 0, ACE_TRY_ENV);
- if (l == *(CORBA::Long *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_char:
- {
- CORBA::Char c;
- *member_label >>= CORBA::Any::to_char (c);
- if (c == *(CORBA::Char *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_wchar:
- {
- CORBA::WChar wc;
- *member_label >>= CORBA::Any::to_wchar (wc);
- if (wc == *(CORBA::WChar *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- case CORBA::tk_boolean:
- {
- CORBA::Boolean b;
- *member_label >>= CORBA::Any::to_boolean (b);
- if (b == *(CORBA::Boolean *) &discrim_val)
- discrim_matched = 1;
- }
- break;
- default:
- ACE_THROW_RETURN (CORBA::BAD_TYPECODE (),
- CORBA::TypeCode::TRAVERSE_STOP);
- }// end of switch
-
- // get the member typecode
- member_tc = tc->member_type (i, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- if (default_index >= 0 && default_index-- == 0)
- // have we reached the default label?, if so,
- // save a handle to the typecode for the default
- default_tc = member_tc;
- if (discrim_matched)
+ member_count = tc->member_count (env);
+ if (env.exception () == 0)
+ {
+ // check which label value matches with the discriminator
+ // value. Accordingly, marshal the corresponding
+ // member_type. If none match, check if default exists
+ // and marshal accordingly. Otherwise it is an error.
+
+ for (i = 0; member_count-- != 0; i++)
+ {
+ member_label = tc->member_label (i, env);
+ if (env.exception () == 0)
+ {
+ CORBA::TypeCode_var type = member_label->type ();
+ // do the matching
+ switch (type->kind (env))
+ {
+ case CORBA::tk_short:
+ {
+ CORBA::Short s;
+ *member_label >>= s;
+ if (s == *(CORBA::Short *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_ushort:
+ {
+ CORBA::UShort s;
+ *member_label >>= s;
+ if (s == *(CORBA::UShort *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_long:
+ {
+ CORBA::Long l;
+ *member_label >>= l;
+ if (l == *(CORBA::Long *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_ulong:
+ {
+ CORBA::ULong l;
+ *member_label >>= l;
+ if (l == *(CORBA::ULong *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_enum:
+ {
+ CORBA::Long l;
+ TAO_InputCDR stream (member_label->_tao_get_cdr ());
+ (void)stream.decode (discrim_tc, &l, 0, env);
+ if (l == *(CORBA::Long *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_char:
+ {
+ CORBA::Char c;
+ *member_label >>= CORBA::Any::to_char (c);
+ if (c == *(CORBA::Char *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_wchar:
+ {
+ CORBA::WChar wc;
+ *member_label >>= CORBA::Any::to_wchar (wc);
+ if (wc == *(CORBA::WChar *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ case CORBA::tk_boolean:
+ {
+ CORBA::Boolean b;
+ *member_label >>= CORBA::Any::to_boolean (b);
+ if (b == *(CORBA::Boolean *) &discrim_val)
+ discrim_matched = 1;
+ }
+ break;
+ default:
+ env.exception (new CORBA::BAD_TYPECODE ());
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }// end of switch
+
+ // get the member typecode
+ member_tc = tc->member_type (i, env);
+ if (env.exception () == 0)
+ {
+ if (default_index >= 0 && default_index-- == 0)
+ // have we reached the default label?, if so,
+ // save a handle to the typecode for the default
+ default_tc = member_tc;
+ if (discrim_matched)
+ {
+ // marshal according to the matched typecode
+ return dest->append (member_tc, src,
+ env);
+ }
+ }
+ else
+ {
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
+ }
+ else
+ {
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
+ } // end of for loop
+ // we are here only if there was no match
+ if (default_tc)
+ {
+ return dest->append (default_tc, src, env);
+ }
+ else
+ return CORBA::TypeCode::TRAVERSE_CONTINUE;
+ }
+ else
+ {
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
+ }
+ else
{
- // marshal according to the matched typecode
- return dest->append (member_tc, src, ACE_TRY_ENV);
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
}
- } // end of for loop
- // we are here only if there was no match
- if (default_tc)
- {
- return dest->append (default_tc, src, ACE_TRY_ENV);
}
else
- return CORBA::TypeCode::TRAVERSE_CONTINUE;
+ {
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
else
{
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
}
}
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// decode string
@@ -516,7 +542,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_String::append (CORBA::TypeCode_ptr,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::Boolean continue_append = 1;
@@ -531,14 +557,14 @@ TAO_Marshal_String::append (CORBA::TypeCode_ptr,
continue_append = dest->append_string (*src);
if (continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_TypeCode::append detected error"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_TypeCode::append detected error"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// Decode sequence.
@@ -547,7 +573,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Sequence::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::Boolean continue_append = 1;
// Return status.
@@ -568,26 +594,27 @@ TAO_Marshal_Sequence::append (CORBA::TypeCode_ptr tc,
if (continue_append)
{
// Get element typecode.
- tc2 = tc->content_type (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ tc2 = tc->content_type (env);
- // For those aggregate types whose size is
- // constant, we compute it only once.
- while (bounds-- && retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ if (env.exception () == 0)
{
- retval = dest->append (tc2, src, ACE_TRY_ENV);
- }
- // CORBA::release (tc2);
- if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
- return CORBA::TypeCode::TRAVERSE_CONTINUE;
+ // For those aggregate types whose size is
+ // constant, we compute it only once.
+ while (bounds-- && retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ {
+ retval = dest->append (tc2, src, env);
+ }
+ // CORBA::release (tc2);
+ if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ return CORBA::TypeCode::TRAVERSE_CONTINUE;
+ } // no exception computing content type
}
// error exit
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"marshaling TAO_Marshal_Sequence::append detected error\n"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (),
- CORBA::TypeCode::TRAVERSE_STOP);
+ env.exception (new CORBA::MARSHAL ());
+ return CORBA::TypeCode::TRAVERSE_STOP;
}
// Decode array.
@@ -596,7 +623,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Array::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
// unused: CORBA::Boolean continue_append = 1;
@@ -610,29 +637,29 @@ TAO_Marshal_Array::append (CORBA::TypeCode_ptr tc,
CORBA::ULong bounds;
// retrieve the bounds of the array
- bounds = tc->length (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- // get element typecode
- tc2 = tc->content_type (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- while (bounds-- && retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ bounds = tc->length (env);
+ if (env.exception () == 0)
{
- retval = dest->append (tc2, src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
- }
-
- if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
- return retval;
+ // get element typecode
+ tc2 = tc->content_type (env);
+ if (env.exception () == 0)
+ {
+ while (bounds-- && retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ {
+ retval = dest->append (tc2, src, env);
+ }
+ // CORBA::release (tc2);
+ if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE)
+ return CORBA::TypeCode::TRAVERSE_CONTINUE;
+ } // no exception computing content type
+ } // no exception computing bounds
// error exit
if (TAO_debug_level > 0)
ACE_DEBUG ((LM_DEBUG,
"TAO_Marshal_Sequence::append detected error"));
-
- ACE_THROW_RETURN (CORBA::MARSHAL (),
- CORBA::TypeCode::TRAVERSE_STOP);
+ env.exception (new CORBA::MARSHAL ());
+ return CORBA::TypeCode::TRAVERSE_STOP;
}
// Decode alias.
@@ -640,7 +667,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Alias::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
// Typecode of the aliased type.
CORBA::TypeCode_ptr tc2;
@@ -650,23 +677,24 @@ TAO_Marshal_Alias::append (CORBA::TypeCode_ptr tc,
CORBA::TypeCode::traverse_status retval =
CORBA::TypeCode::TRAVERSE_CONTINUE;
- tc2 = tc->content_type (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- retval = dest->append (tc2, src, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
+ tc2 = tc->content_type (env);
+ if (env.exception () == 0)
+ {
+ retval = dest->append (tc2, src, env);
+ }
// tc2->_decr_refcnt ();
if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE
&& continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_Alias::append detected error\n"));
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_Alias::append detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// Decode exception For exceptions, the "hidden" type ID near the
@@ -680,7 +708,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_Except::append (CORBA::TypeCode_ptr tc,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::TypeCode::traverse_status retval =
CORBA::TypeCode::TRAVERSE_CONTINUE;
@@ -691,29 +719,36 @@ TAO_Marshal_Except::append (CORBA::TypeCode_ptr tc,
continue_append = dest->append_string (*src);
// Number of fields in the struct.
- int member_count = tc->member_count (ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- for (int i = 0; i < member_count
- && retval == CORBA::TypeCode::TRAVERSE_CONTINUE
- && continue_append == 1; i++)
+ int member_count = tc->member_count (env);
+ if (env.exception () == 0)
{
- param = tc->member_type (i, ACE_TRY_ENV);
- ACE_CHECK_RETURN (CORBA::TypeCode::TRAVERSE_STOP);
-
- retval = dest->append (param, src, ACE_TRY_ENV);
+ for (int i = 0; i < member_count
+ && retval == CORBA::TypeCode::TRAVERSE_CONTINUE
+ && continue_append == 1; i++)
+ {
+ param = tc->member_type (i, env);
+ if (env.exception () == 0)
+ {
+ retval = dest->append (param, src, env);
+ }
+ else
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
+ else
+ return CORBA::TypeCode::TRAVERSE_STOP;
if (retval == CORBA::TypeCode::TRAVERSE_CONTINUE
&& continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_Except::append detected error\n"));
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_Except::append detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}
// decode wstring
@@ -721,7 +756,7 @@ CORBA::TypeCode::traverse_status
TAO_Marshal_WString::append (CORBA::TypeCode_ptr,
TAO_InputCDR *src,
TAO_OutputCDR *dest,
- CORBA::Environment &ACE_TRY_ENV)
+ CORBA::Environment &env)
{
CORBA::Boolean continue_append = 1;
@@ -737,11 +772,12 @@ TAO_Marshal_WString::append (CORBA::TypeCode_ptr,
if (continue_append == 1)
return CORBA::TypeCode::TRAVERSE_CONTINUE;
-
- if (TAO_debug_level > 0)
- ACE_DEBUG ((LM_DEBUG,
- "TAO_Marshal_WString::append detected error\n"));
- ACE_THROW_RETURN (CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE,
- CORBA::COMPLETED_MAYBE),
- CORBA::TypeCode::TRAVERSE_STOP);
+ else
+ {
+ if (TAO_debug_level > 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "TAO_Marshal_WString::append detected error\n"));
+ env.exception (new CORBA::MARSHAL (TAO_DEFAULT_MINOR_CODE, CORBA::COMPLETED_MAYBE));
+ return CORBA::TypeCode::TRAVERSE_STOP;
+ }
}