summaryrefslogtreecommitdiff
path: root/bridges
diff options
context:
space:
mode:
authorCaolán McNamara <cmc@openoffice.org>2010-01-18 11:56:59 +0000
committerCaolán McNamara <cmc@openoffice.org>2010-01-18 11:56:59 +0000
commitcbb8cded67d757f53642e6753d286c6612757ffe (patch)
treec82fa9bdca601becf8c1f6c9d7b15859b94b81b7 /bridges
parent6e8628fb7374b7d19e15f03e63f8ad221ca25f1e (diff)
s390xport02: #i108410# fix endian issues in s390x
Diffstat (limited to 'bridges')
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx8
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx8
2 files changed, 12 insertions, 4 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
index e866e05f32c5..4cb95f9faf76 100644
--- a/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_s390x/cpp2uno.cxx
@@ -522,15 +522,21 @@ long privateSnippetExecutor(long r2, long r3, long r4, long r5, long r6, long fi
switch( aType )
{
- case typelib_TypeClass_VOID:
case typelib_TypeClass_BOOLEAN:
case typelib_TypeClass_BYTE:
+ nRegReturn[0] = (unsigned long)(*(unsigned char *)nRegReturn);
+ break;
case typelib_TypeClass_CHAR:
case typelib_TypeClass_UNSIGNED_SHORT:
case typelib_TypeClass_SHORT:
+ nRegReturn[0] = (unsigned long)(*(unsigned short *)nRegReturn);
+ break;
case typelib_TypeClass_ENUM:
case typelib_TypeClass_UNSIGNED_LONG:
case typelib_TypeClass_LONG:
+ nRegReturn[0] = (unsigned long)(*(unsigned int *)nRegReturn);
+ break;
+ case typelib_TypeClass_VOID:
default:
break;
case typelib_TypeClass_FLOAT:
diff --git a/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx
index 5940f566f9ca..cd922c2fa870 100644
--- a/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_s390x/uno2cpp.cxx
@@ -60,19 +60,21 @@ void MapReturn(long r2, double f0, typelib_TypeClass eTypeClass, sal_uInt64* pRe
{
case typelib_TypeClass_HYPER:
case typelib_TypeClass_UNSIGNED_HYPER:
+ *pRegisterReturn = r2;
+ break;
case typelib_TypeClass_LONG:
case typelib_TypeClass_UNSIGNED_LONG:
case typelib_TypeClass_ENUM:
- *pRegisterReturn = r2;
+ *(unsigned int*)pRegisterReturn = (unsigned int)r2;
break;
case typelib_TypeClass_CHAR:
case typelib_TypeClass_SHORT:
case typelib_TypeClass_UNSIGNED_SHORT:
- *pRegisterReturn = (unsigned short)r2;
+ *(unsigned short*)pRegisterReturn = (unsigned short)r2;
break;
case typelib_TypeClass_BOOLEAN:
case typelib_TypeClass_BYTE:
- *pRegisterReturn = (unsigned char)r2;
+ *(unsigned char*)pRegisterReturn = (unsigned char)r2;
break;
case typelib_TypeClass_FLOAT:
*reinterpret_cast<float *>( pRegisterReturn ) = f0;