summaryrefslogtreecommitdiff
path: root/ACE/ace/CDR_Size.cpp
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2008-08-07 20:23:07 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2008-08-07 20:23:07 +0000
commitb31aaa377282d63b9f4a6bd22f54257180fbad59 (patch)
tree371fd12f9a9711fab9676659ac3ebb0fe6073d94 /ACE/ace/CDR_Size.cpp
parent08fff03cd764ca68f8a1bc35a82020ced9508e07 (diff)
downloadATCD-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.cpp66
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