Kaydet (Commit) b9ebabd6 authored tarafından Vasily Melenchuk's avatar Vasily Melenchuk Kaydeden (comit) Thorsten Behrens

tdf#97231: basic: do not use extra wrapping for string marshaling

previous approach did wrap string reference once again, making
practically "a pointer to pointer to string" so this code was not
working correctly for RegQueryValueExA WinAPI call.

String is already provided as a reference (see marshalString(), so
no reason to wrap its reference.

This approach was just copied from from dllmgr-x86.cxx plus some
minor changes to make both versions similar.

Change-Id: I85065112407de3f078265d2c76437814402eb1b3
Reviewed-on: https://gerrit.libreoffice.org/54645Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
üst 92664be7
......@@ -31,6 +31,7 @@
#include <basic/sbx.hxx>
#include <basic/sbxvar.hxx>
#include "runtime.hxx"
#include <osl/thread.h>
#include <osl/diagnose.h>
#include <rtl/ref.hxx>
......@@ -256,9 +257,15 @@ ErrCode marshal(
std::vector< char > & blob, std::size_t offset, MarshalData & data)
{
OSL_ASSERT(variable != nullptr);
if (!(variable->GetFlags() & SbxFlagBits::Reference)) {
if ((variable->GetType() & SbxARRAY) == 0) {
switch (variable->GetType()) {
SbxDataType eVarType = variable->GetType();
bool bByVal = !(variable->GetFlags() & SbxFlagBits::Reference);
if( !bByVal && !SbiRuntime::isVBAEnabled() && eVarType == SbxSTRING )
bByVal = true;
if (bByVal) {
if ((eVarType & SbxARRAY) == 0) {
switch (eVarType) {
case SbxINTEGER:
add(blob, variable->GetInteger(), outer ? 8 : 2, offset);
break;
......@@ -307,8 +314,8 @@ ErrCode marshal(
}
}
} else {
if ((variable->GetType() & SbxARRAY) == 0) {
switch (variable->GetType()) {
if ((eVarType & SbxARRAY) == 0) {
switch (eVarType) {
case SbxINTEGER:
case SbxLONG:
case SbxSINGLE:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment