diff options
author | Johnny Willemsen <jwillemsen@remedy.nl> | 2007-04-15 18:39:23 +0000 |
---|---|---|
committer | Johnny Willemsen <jwillemsen@remedy.nl> | 2007-04-15 18:39:23 +0000 |
commit | 2688e04a4ee98e0bb832f60e2c740bab0c4f1481 (patch) | |
tree | c64018464dcd3fb2dc6addb5293e07e7622db9cd /TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp | |
parent | b1d7bed393c902e807fc074c3c57bf9b57ba546f (diff) | |
download | ATCD-2688e04a4ee98e0bb832f60e2c740bab0c4f1481.tar.gz |
Sun Apr 15 18:38:56 UTC 2007 Johnny Willemsen <jwillemsen@remedy.nl>
Diffstat (limited to 'TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp')
-rw-r--r-- | TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp | 53 |
1 files changed, 12 insertions, 41 deletions
diff --git a/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp b/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp index cdd6336cbe3..6bfbe5b71ad 100644 --- a/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp +++ b/TAO/tao/AnyTypeCode/Any_Unknown_IDL_Type.cpp @@ -132,53 +132,24 @@ TAO::Unknown_IDL_Type::_tao_decode (TAO_InputCDR &cdr) // space in the message block. size_t const size = end - begin; - if(this->type_->kind() != CORBA::tk_struct) - { - ACE_Message_Block new_mb (size + 2 * ACE_CDR::MAX_ALIGNMENT); - - ACE_CDR::mb_align (&new_mb); - ptrdiff_t offset = ptrdiff_t (begin) % ACE_CDR::MAX_ALIGNMENT; - - if (offset < 0) - { - offset += ACE_CDR::MAX_ALIGNMENT; - } - - new_mb.rd_ptr (offset); - new_mb.wr_ptr (offset + size); + ACE_Message_Block new_mb (size + 2 * ACE_CDR::MAX_ALIGNMENT); - ACE_OS::memcpy (new_mb.rd_ptr (), begin, size); + ACE_CDR::mb_align (&new_mb); + ptrdiff_t offset = ptrdiff_t (begin) % ACE_CDR::MAX_ALIGNMENT; - this->cdr_.reset (&new_mb, cdr.byte_order ()); - this->cdr_.char_translator (cdr.char_translator ()); - this->cdr_.wchar_translator (cdr.wchar_translator ()); - } - else + if (offset < 0) { - ACE_Message_Block *mb = (ACE_Message_Block *)cdr.start (); - - size_t const size = end - mb->base(); - - ptrdiff_t offset = begin - mb->base(); - - ACE_Message_Block new_mb (size + 2 * ACE_CDR::MAX_ALIGNMENT); - - new_mb.wr_ptr(size + 2 * ACE_CDR::MAX_ALIGNMENT); - - this->cdr_.reset (&new_mb, cdr.byte_order ()); - this->cdr_.char_translator (cdr.char_translator ()); - this->cdr_.wchar_translator (cdr.wchar_translator ()); - - ACE_Message_Block *mb_ = (ACE_Message_Block *)cdr_.start(); + offset += ACE_CDR::MAX_ALIGNMENT; + } - ptrdiff_t align_ofs = (ptrdiff_t(mb->base() - mb_->base()) - %ACE_CDR::MAX_ALIGNMENT + ACE_CDR::MAX_ALIGNMENT) % ACE_CDR::MAX_ALIGNMENT; + new_mb.rd_ptr (offset); + new_mb.wr_ptr (offset + size); - ACE_OS::memcpy (mb_->base() + align_ofs, mb->base(), size); + ACE_OS::memcpy (new_mb.rd_ptr (), begin, size); - mb_->rd_ptr(mb_->base() + offset + align_ofs); - mb_->wr_ptr(mb_->base() + size + align_ofs); - } + this->cdr_.reset (&new_mb, cdr.byte_order ()); + this->cdr_.char_translator (cdr.char_translator ()); + this->cdr_.wchar_translator (cdr.wchar_translator ()); // Take over the GIOP version, the input cdr can have a different // version then our current GIOP version. |