bridges/source/net_uno/net_bridge.cxx | 4 bridges/source/net_uno/net_bridge.hxx | 5 bridges/source/net_uno/net_data.cxx | 351 ++++++++++++---------------------- bridges/source/net_uno/net_func.cxx | 17 - 4 files changed, 137 insertions(+), 240 deletions(-)
New commits: commit 506ca0955459398ff6059f1c4aa07996e9bd8d37 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Tue Sep 16 18:40:18 2025 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Wed Sep 17 06:17:11 2025 +0200 map_net_value_to_uno: assignObject is always true: drop it Change-Id: Idea53cacb0003630f1f4cad95e41281cc01c8ecd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191033 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/bridges/source/net_uno/net_bridge.cxx b/bridges/source/net_uno/net_bridge.cxx index 1ef22114ad26..7c9c4a99ec6b 100644 --- a/bridges/source/net_uno/net_bridge.cxx +++ b/bridges/source/net_uno/net_bridge.cxx @@ -46,7 +46,7 @@ void SAL_CALL Mapping_net2uno(uno_Mapping* mapping, void** ppOut, void* pIn, { Value interfaceValue; interfaceValue.interfaceData = pIn; - bridge->map_net_value_to_uno(*ppOut, &interfaceValue, pTD->aBase.pWeakRef, true, true); + bridge->map_net_value_to_uno(*ppOut, &interfaceValue, pTD->aBase.pWeakRef, true); } } diff --git a/bridges/source/net_uno/net_bridge.hxx b/bridges/source/net_uno/net_bridge.hxx index 9fafc1eb42cb..ab6adc1794b1 100644 --- a/bridges/source/net_uno/net_bridge.hxx +++ b/bridges/source/net_uno/net_bridge.hxx @@ -44,8 +44,7 @@ struct Bridge void map_uno_to_net_value(void* pUnoData, Value* pValue, typelib_TypeDescriptionReference* pTDRef); void map_net_value_to_uno(void* pUnoData, Value* pValue, - typelib_TypeDescriptionReference* pTDRef, bool destructObject, - bool assignObject); + typelib_TypeDescriptionReference* pTDRef, bool destructObject); bool call_uno_func(uno_Interface* pUnoI, const typelib_TypeDescription* pMethodTD, typelib_TypeDescriptionReference* pReturnTDRef, int nParams, diff --git a/bridges/source/net_uno/net_data.cxx b/bridges/source/net_uno/net_data.cxx index 2e797361bea5..8f91c6315837 100644 --- a/bridges/source/net_uno/net_data.cxx +++ b/bridges/source/net_uno/net_data.cxx @@ -367,7 +367,7 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen } void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReference* pTDRef, - bool bDestructObject, bool bAssignData, Bridge& bridge) + bool bDestructObject, Bridge& bridge) { switch (pTDRef->eTypeClass) { @@ -383,8 +383,7 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer case typelib_TypeClass_FLOAT: case typelib_TypeClass_DOUBLE: case typelib_TypeClass_ENUM: - if (bAssignData) - std::memcpy(pUnoData, pNetData, net_sizeof(pTDRef->eTypeClass)); + std::memcpy(pUnoData, pNetData, net_sizeof(pTDRef->eTypeClass)); break; case typelib_TypeClass_STRING: { @@ -394,14 +393,11 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer if (bDestructObject && ppUnoStr) rtl_uString_release(*ppUnoStr); - if (bAssignData) - { - *ppUnoStr = nullptr; - if (pNetStr) - rtl_uString_newFromStr(ppUnoStr, static_cast<String>(pNetStr)); - else - rtl_uString_new(ppUnoStr); - } + *ppUnoStr = nullptr; + if (pNetStr) + rtl_uString_newFromStr(ppUnoStr, static_cast<String>(pNetStr)); + else + rtl_uString_new(ppUnoStr); std::free(pNetStr); break; @@ -415,8 +411,7 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer if (bDestructObject && ppUnoType) typelib_typedescriptionreference_release(*ppUnoType); - if (bAssignData) - *ppUnoType = map_net_type_to_uno(OUString(static_cast<String>(pNetType))); + *ppUnoType = map_net_type_to_uno(OUString(static_cast<String>(pNetType))); std::free(pNetType); break; @@ -433,169 +428,107 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer = map_net_type_to_uno(OUString(static_cast<String>(pNetAny->type))); std::free(pNetAny->type); - if (bAssignData) + switch (pValueTDRef->eTypeClass) { - switch (pValueTDRef->eTypeClass) + case typelib_TypeClass_VOID: { - case typelib_TypeClass_VOID: - { - pUnoAny->pType = pValueTDRef; - pUnoAny->pData = &pUnoAny->pReserved; - break; - } - case typelib_TypeClass_BOOLEAN: - case typelib_TypeClass_BYTE: - case typelib_TypeClass_CHAR: - case typelib_TypeClass_SHORT: - case typelib_TypeClass_UNSIGNED_SHORT: - case typelib_TypeClass_LONG: - case typelib_TypeClass_UNSIGNED_LONG: - case typelib_TypeClass_FLOAT: - case typelib_TypeClass_ENUM: + pUnoAny->pType = pValueTDRef; + pUnoAny->pData = &pUnoAny->pReserved; + break; + } + case typelib_TypeClass_BOOLEAN: + case typelib_TypeClass_BYTE: + case typelib_TypeClass_CHAR: + case typelib_TypeClass_SHORT: + case typelib_TypeClass_UNSIGNED_SHORT: + case typelib_TypeClass_LONG: + case typelib_TypeClass_UNSIGNED_LONG: + case typelib_TypeClass_FLOAT: + case typelib_TypeClass_ENUM: + { + pUnoAny->pType = pValueTDRef; + pUnoAny->pData = &pUnoAny->pReserved; + std::memcpy(pUnoAny->pData, &pNetAny->data, sizeof(IntPtr)); + break; + } + case typelib_TypeClass_HYPER: + case typelib_TypeClass_UNSIGNED_HYPER: + case typelib_TypeClass_DOUBLE: + { + pUnoAny->pType = pValueTDRef; + size_t size = net_sizeof(pValueTDRef->eTypeClass); + if (size <= sizeof(IntPtr)) { - pUnoAny->pType = pValueTDRef; pUnoAny->pData = &pUnoAny->pReserved; std::memcpy(pUnoAny->pData, &pNetAny->data, sizeof(IntPtr)); - break; } - case typelib_TypeClass_HYPER: - case typelib_TypeClass_UNSIGNED_HYPER: - case typelib_TypeClass_DOUBLE: - { - pUnoAny->pType = pValueTDRef; - size_t size = net_sizeof(pValueTDRef->eTypeClass); - if (size <= sizeof(IntPtr)) - { - pUnoAny->pData = &pUnoAny->pReserved; - std::memcpy(pUnoAny->pData, &pNetAny->data, sizeof(IntPtr)); - } - else - { - void* mem = std::malloc(size); - assert(mem); - std::memcpy(mem, pNetAny->data, size); - pUnoAny->pData = mem; - std::free(pNetAny->data); - } - break; - } - case typelib_TypeClass_STRING: - case typelib_TypeClass_TYPE: - case typelib_TypeClass_INTERFACE: - { - if (pNetAny->data) - { - pUnoAny->pType = pValueTDRef; - pUnoAny->pData = &pUnoAny->pReserved; - pUnoAny->pReserved = nullptr; - unmarshal_data(pUnoAny->pData, &pNetAny->data, pValueTDRef, - bDestructObject, true, bridge); - } - else - { - uno_any_construct(pUnoAny, nullptr, nullptr, nullptr); - } - break; - } - case typelib_TypeClass_ANY: - case typelib_TypeClass_SEQUENCE: + else { - if (pNetAny->data) - { - pUnoAny->pType = pValueTDRef; - pUnoAny->pData = &pUnoAny->pReserved; - pUnoAny->pReserved = nullptr; - unmarshal_data(pUnoAny->pData, &pNetAny->data, pValueTDRef, - bDestructObject, true, bridge); - } - else - { - uno_any_construct(pUnoAny, nullptr, nullptr, nullptr); - } - break; + void* mem = std::malloc(size); + assert(mem); + std::memcpy(mem, pNetAny->data, size); + pUnoAny->pData = mem; + std::free(pNetAny->data); } - case typelib_TypeClass_STRUCT: - case typelib_TypeClass_EXCEPTION: + break; + } + case typelib_TypeClass_STRING: + case typelib_TypeClass_TYPE: + case typelib_TypeClass_INTERFACE: + { + if (pNetAny->data) { - if (pNetAny->data) - { - pUnoAny->pType = pValueTDRef; - TypeDescHolder valueType(pValueTDRef); - void* mem = std::malloc(valueType.get()->nSize); - unmarshal_data(mem, &pNetAny->data, pValueTDRef, bDestructObject, true, - bridge); - pUnoAny->pData = mem; - } - else - { - uno_any_construct(pUnoAny, nullptr, nullptr, nullptr); - } - break; + pUnoAny->pType = pValueTDRef; + pUnoAny->pData = &pUnoAny->pReserved; + pUnoAny->pReserved = nullptr; + unmarshal_data(pUnoAny->pData, &pNetAny->data, pValueTDRef, bDestructObject, + bridge); } - default: + else { - throw BridgeRuntimeError(SAL_WHERE, - "could not map " - + OUString::unacquired(&pValueTDRef->pTypeName) - + " into an UNO any"); + uno_any_construct(pUnoAny, nullptr, nullptr, nullptr); } + break; } - } - else - { - switch (pValueTDRef->eTypeClass) + case typelib_TypeClass_ANY: + case typelib_TypeClass_SEQUENCE: { - case typelib_TypeClass_VOID: - case typelib_TypeClass_BOOLEAN: - case typelib_TypeClass_BYTE: - case typelib_TypeClass_CHAR: - case typelib_TypeClass_SHORT: - case typelib_TypeClass_UNSIGNED_SHORT: - case typelib_TypeClass_LONG: - case typelib_TypeClass_UNSIGNED_LONG: - case typelib_TypeClass_FLOAT: - case typelib_TypeClass_ENUM: - break; - case typelib_TypeClass_HYPER: - case typelib_TypeClass_UNSIGNED_HYPER: - case typelib_TypeClass_DOUBLE: + if (pNetAny->data) { - size_t size = net_sizeof(pValueTDRef->eTypeClass); - if (pNetAny->data && size > sizeof(IntPtr)) - std::free(pNetAny->data); - break; + pUnoAny->pType = pValueTDRef; + pUnoAny->pData = &pUnoAny->pReserved; + pUnoAny->pReserved = nullptr; + unmarshal_data(pUnoAny->pData, &pNetAny->data, pValueTDRef, bDestructObject, + bridge); } - case typelib_TypeClass_ANY: - case typelib_TypeClass_SEQUENCE: + else { - if (pNetAny->data) - { - unmarshal_data(pUnoAny->pData, &pNetAny->data, pValueTDRef, - bDestructObject, false, bridge); - std::free(pNetAny->data); - } - break; + uno_any_construct(pUnoAny, nullptr, nullptr, nullptr); } - case typelib_TypeClass_STRING: - case typelib_TypeClass_TYPE: - case typelib_TypeClass_INTERFACE: - case typelib_TypeClass_STRUCT: - case typelib_TypeClass_EXCEPTION: + break; + } + case typelib_TypeClass_STRUCT: + case typelib_TypeClass_EXCEPTION: + { + if (pNetAny->data) { - if (pNetAny->data) - { - unmarshal_data(pUnoAny->pData, &pNetAny->data, pValueTDRef, - bDestructObject, false, bridge); - } - break; + pUnoAny->pType = pValueTDRef; + TypeDescHolder valueType(pValueTDRef); + void* mem = std::malloc(valueType.get()->nSize); + unmarshal_data(mem, &pNetAny->data, pValueTDRef, bDestructObject, bridge); + pUnoAny->pData = mem; } - default: + else { - throw BridgeRuntimeError(SAL_WHERE, - "could not map " - + OUString::unacquired(&pValueTDRef->pTypeName) - + " into an UNO any"); + uno_any_construct(pUnoAny, nullptr, nullptr, nullptr); } + break; + } + default: + { + throw BridgeRuntimeError( + SAL_WHERE, "could not map " + OUString::unacquired(&pValueTDRef->pTypeName) + + " into an UNO any"); } } break; @@ -627,9 +560,7 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer case typelib_TypeClass_FLOAT: case typelib_TypeClass_DOUBLE: case typelib_TypeClass_ENUM: - if (bAssignData) - *ppUnoSeq - = alloc_uno_sequence(pNetSeq->length, nNetElemSize, pNetSeq->data); + *ppUnoSeq = alloc_uno_sequence(pNetSeq->length, nNetElemSize, pNetSeq->data); break; case typelib_TypeClass_ANY: case typelib_TypeClass_SEQUENCE: @@ -652,20 +583,16 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer void* pNetElem = static_cast<char*>(pNetSeq->data) + (nPos * nNetElemSize); void* pUnoElem = (*ppUnoSeq)->elements + (nPos * nUnoElemSize); - unmarshal_data(pUnoElem, pNetElem, pElemTDRef, bDestructObject, - bAssignData, bridge); + unmarshal_data(pUnoElem, pNetElem, pElemTDRef, bDestructObject, bridge); } } catch (...) { - if (bAssignData) + // Clean up already converted elements + for (int nClean = 0; nClean < nPos; ++nClean) { - // Clean up already converted elements - for (int nClean = 0; nClean < nPos; ++nClean) - { - void* pUnoElem = (*ppUnoSeq)->elements + (nClean * nUnoElemSize); - uno_destructData(pUnoElem, elemType.get(), nullptr); - } + void* pUnoElem = (*ppUnoSeq)->elements + (nClean * nUnoElemSize); + uno_destructData(pUnoElem, elemType.get(), nullptr); } throw; } @@ -692,31 +619,27 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer if (bDestructObject && ppUnoI) uno_destructData(ppUnoI, type.get(), nullptr); - if (bAssignData) + if (pNetI) { - if (pNetI) - { - Context* pCtx = static_cast<Context*>(bridge.m_net_env->pContext); + Context* pCtx = static_cast<Context*>(bridge.m_net_env->pContext); - // Get oid and type description - OUString sOid(pCtx->lookupObjectId(pNetI)); + // Get oid and type description + OUString sOid(pCtx->lookupObjectId(pNetI)); - typelib_InterfaceTypeDescription* pInterfaceTD - = reinterpret_cast<typelib_InterfaceTypeDescription*>(type.get()); + typelib_InterfaceTypeDescription* pInterfaceTD + = reinterpret_cast<typelib_InterfaceTypeDescription*>(type.get()); - // Get the proxy if already created, else create new - *ppUnoI = nullptr; - (*bridge.m_uno_env->getRegisteredInterface)(bridge.m_uno_env, - reinterpret_cast<void**>(ppUnoI), - sOid.pData, pInterfaceTD); + // Get the proxy if already created, else create new + *ppUnoI = nullptr; + (*bridge.m_uno_env->getRegisteredInterface)( + bridge.m_uno_env, reinterpret_cast<void**>(ppUnoI), sOid.pData, pInterfaceTD); - if (!*ppUnoI) - *ppUnoI = new NetProxy(bridge, pNetI, pInterfaceTD, sOid); - } - else - { - *ppUnoI = nullptr; - } + if (!*ppUnoI) + *ppUnoI = new NetProxy(bridge, pNetI, pInterfaceTD, sOid); + } + else + { + *ppUnoI = nullptr; } break; @@ -772,9 +695,7 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer case typelib_TypeClass_FLOAT: case typelib_TypeClass_DOUBLE: case typelib_TypeClass_ENUM: - if (bAssignData) - std::memcpy(pUnoField, pNetField, - net_sizeof(pMemberTDRef->eTypeClass)); + std::memcpy(pUnoField, pNetField, net_sizeof(pMemberTDRef->eTypeClass)); break; case typelib_TypeClass_ANY: case typelib_TypeClass_SEQUENCE: @@ -784,7 +705,7 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer case typelib_TypeClass_EXCEPTION: case typelib_TypeClass_STRUCT: unmarshal_data(pUnoField, pNetField, pMemberTDRef, bDestructObject, - bAssignData, bridge); + bridge); break; default: { @@ -800,15 +721,12 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer } catch (...) { - if (bAssignData) + // Clean up already converted fields + for (int nClean = vecMembers.size() - 1; nClean > nPos; nClean--) { - // Clean up already converted fields - for (int nClean = vecMembers.size() - 1; nClean > nPos; nClean--) - { - auto[pMemberTDRef, nUnoOffset] = vecMembers[nClean]; - void* pUnoField = static_cast<char*>(pUnoStruct) + nUnoOffset; - uno_type_destructData(pUnoField, pMemberTDRef, nullptr); - } + auto[pMemberTDRef, nUnoOffset] = vecMembers[nClean]; + void* pUnoField = static_cast<char*>(pUnoStruct) + nUnoOffset; + uno_type_destructData(pUnoField, pMemberTDRef, nullptr); } throw; } @@ -833,10 +751,9 @@ void Bridge::map_uno_to_net_value(void* pUnoData, Value* pValue, } void Bridge::map_net_value_to_uno(void* pUnoData, Value* pValue, - typelib_TypeDescriptionReference* pTDRef, bool bDestructObject, - bool bAssignObject) + typelib_TypeDescriptionReference* pTDRef, bool bDestructObject) { - unmarshal_data(pUnoData, pValue, pTDRef, bDestructObject, bAssignObject, *this); + unmarshal_data(pUnoData, pValue, pTDRef, bDestructObject, *this); } } diff --git a/bridges/source/net_uno/net_func.cxx b/bridges/source/net_uno/net_func.cxx index c0e1446593ee..4f03c73e30a9 100644 --- a/bridges/source/net_uno/net_func.cxx +++ b/bridges/source/net_uno/net_func.cxx @@ -43,7 +43,7 @@ void Bridge::call_net_func(IntPtr pNetI, const typelib_TypeDescription* pMethodT { if (param.bOut) map_net_value_to_uno(pArgs[i], &pArgsRetExc[i], param.pTypeRef, - param.bIn && param.bOut, true); + param.bIn && param.bOut); } catch (...) { @@ -63,13 +63,13 @@ void Bridge::call_net_func(IntPtr pNetI, const typelib_TypeDescription* pMethodT if (error) { map_net_value_to_uno(*pExc, &pArgsRetExc[nParams + 1], - cppu::UnoType<css::uno::Any>::get().getTypeLibType(), false, true); + cppu::UnoType<css::uno::Any>::get().getTypeLibType(), false); } else { if (pReturnTDRef && pReturnTDRef->eTypeClass != typelib_TypeClass_VOID) { - map_net_value_to_uno(pRet, &pArgsRetExc[nParams], pReturnTDRef, false, true); + map_net_value_to_uno(pRet, &pArgsRetExc[nParams], pReturnTDRef, false); } *pExc = nullptr; @@ -150,7 +150,7 @@ bool Bridge::call_uno_func(uno_Interface* pUnoI, const typelib_TypeDescription* try { // in, in/out params - map_net_value_to_uno(uno_args[i], &pArgs[i], type, false, true); + map_net_value_to_uno(uno_args[i], &pArgs[i], type, false); } catch (...) { commit 82347d2f6086c732bb6c869b589e0c4daa3e4976 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Tue Sep 16 17:19:52 2025 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Wed Sep 17 06:17:06 2025 +0200 map_uno_to_net_value: destructValue is always false: drop it Change-Id: I3ebc69a1978a6f0c74680bf18da3347bd6dbe767 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191032 Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Tested-by: Jenkins diff --git a/bridges/source/net_uno/net_bridge.cxx b/bridges/source/net_uno/net_bridge.cxx index 19a15a8ad0e1..1ef22114ad26 100644 --- a/bridges/source/net_uno/net_bridge.cxx +++ b/bridges/source/net_uno/net_bridge.cxx @@ -61,7 +61,7 @@ void SAL_CALL Mapping_uno2net(uno_Mapping* mapping, void** ppOut, void* pIn, if (pIn) { Value interfaceValue; - bridge->map_uno_to_net_value(&pIn, &interfaceValue, pTD->aBase.pWeakRef, false); + bridge->map_uno_to_net_value(&pIn, &interfaceValue, pTD->aBase.pWeakRef); *ppOut = interfaceValue.interfaceData; } } diff --git a/bridges/source/net_uno/net_bridge.hxx b/bridges/source/net_uno/net_bridge.hxx index 19c07243743a..9fafc1eb42cb 100644 --- a/bridges/source/net_uno/net_bridge.hxx +++ b/bridges/source/net_uno/net_bridge.hxx @@ -42,7 +42,7 @@ struct Bridge void release(); void map_uno_to_net_value(void* pUnoData, Value* pValue, - typelib_TypeDescriptionReference* pTDRef, bool destructValue); + typelib_TypeDescriptionReference* pTDRef); void map_net_value_to_uno(void* pUnoData, Value* pValue, typelib_TypeDescriptionReference* pTDRef, bool destructObject, bool assignObject); diff --git a/bridges/source/net_uno/net_data.cxx b/bridges/source/net_uno/net_data.cxx index 667f65f7ac88..2e797361bea5 100644 --- a/bridges/source/net_uno/net_data.cxx +++ b/bridges/source/net_uno/net_data.cxx @@ -76,7 +76,7 @@ uno_Sequence* alloc_uno_sequence(sal_Int32 nElements, sal_Int32 nElementSize, vo } void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReference* pTDRef, - bool bDestructValue, Bridge& bridge) + Bridge& bridge) { switch (pTDRef->eTypeClass) { @@ -99,9 +99,6 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen IntPtr* ppNetStr = static_cast<IntPtr*>(pNetData); rtl_uString* pUnoStr = *static_cast<rtl_uString**>(pUnoData); - if (bDestructValue && pNetData) - std::free(pNetData); - *ppNetStr = alloc_net_string(OUString::unacquired(&pUnoStr)); break; } @@ -111,9 +108,6 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen typelib_TypeDescriptionReference* pUnoType = *static_cast<typelib_TypeDescriptionReference**>(pUnoData); - if (bDestructValue && pNetData) - std::free(pNetData); - *ppNetType = alloc_net_string(map_uno_type_to_net(pUnoType)); break; } @@ -122,11 +116,6 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen Value::Any* ppNetAny = static_cast<Value::Any*>(pNetData); uno_Any* pUnoAny = static_cast<uno_Any*>(pUnoData); - if (bDestructValue && ppNetAny->type) - std::free(ppNetAny->type); - if (bDestructValue && ppNetAny->data) - std::free(ppNetAny->data); - ppNetAny->type = alloc_net_string(map_uno_type_to_net(pUnoAny->pType)); switch (pUnoAny->pType->eTypeClass) @@ -168,7 +157,7 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen case typelib_TypeClass_SEQUENCE: { IntPtr mem = std::malloc(net_sizeof(pUnoAny->pType->eTypeClass)); - marshal_data(pUnoAny->pData, mem, pUnoAny->pType, bDestructValue, bridge); + marshal_data(pUnoAny->pData, mem, pUnoAny->pType, bridge); std::free(ppNetAny->data); ppNetAny->data = mem; break; @@ -178,8 +167,7 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen case typelib_TypeClass_INTERFACE: case typelib_TypeClass_EXCEPTION: case typelib_TypeClass_STRUCT: - marshal_data(pUnoAny->pData, &ppNetAny->data, pUnoAny->pType, bDestructValue, - bridge); + marshal_data(pUnoAny->pData, &ppNetAny->data, pUnoAny->pType, bridge); break; default: { @@ -196,9 +184,6 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen Value::Sequence* ppNetSeq = static_cast<Value::Sequence*>(pNetData); uno_Sequence* pUnoSeq = *static_cast<uno_Sequence**>(pUnoData); - if (bDestructValue && ppNetSeq->data) - std::free(ppNetSeq->data); - ppNetSeq->length = pUnoSeq->nElements; TypeDescHolder type(pTDRef); @@ -245,7 +230,7 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen { void* pNetElem = static_cast<char*>(ppNetSeq->data) + (nPos * nNetElemSize); void* pUnoElem = pUnoSeq->elements + (nPos * nUnoElemSize); - marshal_data(pUnoElem, pNetElem, pElemTDRef, bDestructValue, bridge); + marshal_data(pUnoElem, pNetElem, pElemTDRef, bridge); } break; } @@ -304,9 +289,6 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen IntPtr* ppNetStruct = static_cast<IntPtr*>(pNetData); void* pUnoStruct = pUnoData; - if (bDestructValue && *ppNetStruct) - std::free(*ppNetStruct); - TypeDescHolder type(pTDRef); typelib_CompoundTypeDescription* pCompTD = reinterpret_cast<typelib_CompoundTypeDescription*>(type.get()); @@ -360,7 +342,7 @@ void marshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionReferen case typelib_TypeClass_INTERFACE: case typelib_TypeClass_EXCEPTION: case typelib_TypeClass_STRUCT: - marshal_data(pUnoField, pNetField, pMemberTDRef, bDestructValue, bridge); + marshal_data(pUnoField, pNetField, pMemberTDRef, bridge); break; default: { @@ -845,9 +827,9 @@ void unmarshal_data(void* pUnoData, void* pNetData, typelib_TypeDescriptionRefer } void Bridge::map_uno_to_net_value(void* pUnoData, Value* pValue, - typelib_TypeDescriptionReference* pTDRef, bool bDestructValue) + typelib_TypeDescriptionReference* pTDRef) { - marshal_data(pUnoData, pValue, pTDRef, bDestructValue, *this); + marshal_data(pUnoData, pValue, pTDRef, *this); } void Bridge::map_net_value_to_uno(void* pUnoData, Value* pValue, diff --git a/bridges/source/net_uno/net_func.cxx b/bridges/source/net_uno/net_func.cxx index 788bfe1a76c4..c0e1446593ee 100644 --- a/bridges/source/net_uno/net_func.cxx +++ b/bridges/source/net_uno/net_func.cxx @@ -26,7 +26,7 @@ void Bridge::call_net_func(IntPtr pNetI, const typelib_TypeDescription* pMethodT const typelib_MethodParameter& param = pParams[i]; if (param.bIn) { - map_uno_to_net_value(pArgs[i], &pArgsRetExc[i], param.pTypeRef, false); + map_uno_to_net_value(pArgs[i], &pArgsRetExc[i], param.pTypeRef); } } @@ -186,7 +186,7 @@ bool Bridge::call_uno_func(uno_Interface* pUnoI, const typelib_TypeDescription* { try { - map_uno_to_net_value(uno_args[i], &pArgs[i], param.pTypeRef, false); + map_uno_to_net_value(uno_args[i], &pArgs[i], param.pTypeRef); } catch (...) { @@ -216,7 +216,7 @@ bool Bridge::call_uno_func(uno_Interface* pUnoI, const typelib_TypeDescription* // Convert uno return value try { - map_uno_to_net_value(uno_ret, pRet, pReturnTDRef, false); + map_uno_to_net_value(uno_ret, pRet, pReturnTDRef); uno_type_destructData(uno_ret, pReturnTDRef, nullptr); } catch (...) @@ -240,8 +240,7 @@ bool Bridge::call_uno_func(uno_Interface* pUnoI, const typelib_TypeDescription* } } - map_uno_to_net_value(uno_exc, pExc, cppu::UnoType<css::uno::Any>::get().getTypeLibType(), - false); + map_uno_to_net_value(uno_exc, pExc, cppu::UnoType<css::uno::Any>::get().getTypeLibType()); return false; }