diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2008-08-07 20:23:07 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2008-08-07 20:23:07 +0000 |
commit | b31aaa377282d63b9f4a6bd22f54257180fbad59 (patch) | |
tree | 371fd12f9a9711fab9676659ac3ebb0fe6073d94 /ACE/ace/CDR_Size.cpp | |
parent | 08fff03cd764ca68f8a1bc35a82020ced9508e07 (diff) | |
download | ATCD-b31aaa377282d63b9f4a6bd22f54257180fbad59.tar.gz |
ChangeLogTag: Thu Aug 7 20:21:29 UTC 2008 Jeff Parsons <j.parsons@vanderbilt.edu>
Diffstat (limited to 'ACE/ace/CDR_Size.cpp')
-rw-r--r-- | ACE/ace/CDR_Size.cpp | 66 |
1 files changed, 42 insertions, 24 deletions
diff --git a/ACE/ace/CDR_Size.cpp b/ACE/ace/CDR_Size.cpp index c737db786d9..d221eb23033 100644 --- a/ACE/ace/CDR_Size.cpp +++ b/ACE/ace/CDR_Size.cpp @@ -1,6 +1,7 @@ #include "ace/CDR_Size.h" #include "ace/SString.h" #include "ace/OS_Memory.h" +#include "ace/Truncate.h" #if !defined (__ACE_INLINE__) # include "ace/CDR_Size.inl" @@ -22,35 +23,41 @@ ACE_SizeCDR::write_wchar (ACE_CDR::WChar x) errno = EACCES; return (this->good_bit_ = false); } + if (static_cast<ACE_CDR::Short> (major_version_) == 1 && static_cast<ACE_CDR::Short> (minor_version_) == 2) { ACE_CDR::Octet len = static_cast<ACE_CDR::Octet> (ACE_OutputCDR::wchar_maxbytes ()); + if (this->write_1 (&len)) { if (ACE_OutputCDR::wchar_maxbytes () == sizeof(ACE_CDR::WChar)) - return - this->write_octet_array ( - reinterpret_cast<const ACE_CDR::Octet*> (&x), - static_cast<ACE_CDR::ULong> (len)); + { + return + this->write_octet_array ( + reinterpret_cast<const ACE_CDR::Octet*> (&x), + static_cast<ACE_CDR::ULong> (len)); + } else - if (ACE_OutputCDR::wchar_maxbytes () == 2) - { - ACE_CDR::Short sx = static_cast<ACE_CDR::Short> (x); - return - this->write_octet_array ( - reinterpret_cast<const ACE_CDR::Octet*> (&sx), - static_cast<ACE_CDR::ULong> (len)); - } - else - { - ACE_CDR::Octet ox = static_cast<ACE_CDR::Octet> (x); - return - this->write_octet_array ( - reinterpret_cast<const ACE_CDR::Octet*> (&ox), - static_cast<ACE_CDR::ULong> (len)); - } + { + if (ACE_OutputCDR::wchar_maxbytes () == 2) + { + ACE_CDR::Short sx = static_cast<ACE_CDR::Short> (x); + return + this->write_octet_array ( + reinterpret_cast<const ACE_CDR::Octet*> (&sx), + static_cast<ACE_CDR::ULong> (len)); + } + else + { + ACE_CDR::Octet ox = static_cast<ACE_CDR::Octet> (x); + return + this->write_octet_array ( + reinterpret_cast<const ACE_CDR::Octet*> (&ox), + static_cast<ACE_CDR::ULong> (len)); + } + } } } else if (static_cast<ACE_CDR::Short> (minor_version_) == 0) @@ -58,6 +65,7 @@ ACE_SizeCDR::write_wchar (ACE_CDR::WChar x) errno = EINVAL; return (this->good_bit_ = false); } + if (ACE_OutputCDR::wchar_maxbytes () == sizeof (ACE_CDR::WChar)) { const void *temp = &x; @@ -68,6 +76,7 @@ ACE_SizeCDR::write_wchar (ACE_CDR::WChar x) ACE_CDR::Short sx = static_cast<ACE_CDR::Short> (x); return this->write_2 (reinterpret_cast<const ACE_CDR::UShort *> (&sx)); } + ACE_CDR::Octet ox = static_cast<ACE_CDR::Octet> (x); return this->write_1 (reinterpret_cast<const ACE_CDR::Octet *> (&ox)); } @@ -125,12 +134,21 @@ ACE_SizeCDR::write_wstring (ACE_CDR::ULong len, //In GIOP 1.2 the length field contains the number of bytes //the wstring occupies rather than number of wchars //Taking sizeof might not be a good way! This is a temporary fix. - if (this->write_ulong (ACE_OutputCDR::wchar_maxbytes () * len)) - return this->write_wchar_array (x, len); + ACE_CDR::Boolean good_ulong = + this->write_ulong ( + ACE_Utils::truncate_cast<ACE_CDR::ULong> ( + ACE_OutputCDR::wchar_maxbytes () * len)); + + if (good_ulong) + { + return this->write_wchar_array (x, len); + } } else - //In GIOP 1.2 zero length wstrings are legal - return this->write_ulong (0); + { + //In GIOP 1.2 zero length wstrings are legal + return this->write_ulong (0); + } } else |