blob: 8e6f0c0165eed49a0352ccaa00994ade7e3a1e38 [file] [log] [blame]
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
#include <windows.h>
#include <cee.h>
#include <idltype.h>
#include <marshaling.h>
#define SRVRTRACE_ENTER(name)
#define SRVRTRACE_EXIT(name)
//
//----------- input parameters ------------------------------
//
CEE_status decodeParameters(short count, long* param[], char* buffer, long length)
{
SRVRTRACE_ENTER(FILE_IMR+1);
char* pbuffer = buffer;
long* parptr, *mapptr;
int i;
long start_data = 0;
long end_data = length;
long offset;
memset (param, 0, count*sizeof(long));
for (start_data=count * sizeof(long) ;start_data < length; start_data += sizeof(long))
{
if ((long)buffer[start_data] == 0)
{
start_data += sizeof(long);
break;
}
}
if (start_data >= length)
{
SRVRTRACE_EXIT(FILE_IMR+1);
return -1;
}
for (parptr = (long*)pbuffer, i=0; i < count; i++, parptr++)
{
if (*parptr != 0)
{
offset = *(parptr);
if (offset < start_data || offset >= end_data)
{
SRVRTRACE_EXIT(FILE_IMR+1);
return i+1;
}
*(parptr) += (long)pbuffer;
param[i] = (long*)*(parptr);
}
else
param[i] = NULL;
}
for (mapptr = (long*)buffer + count; *mapptr != 0; mapptr++, i++)
{
offset =(long)*mapptr;
if (offset < start_data || offset >= end_data)
{
SRVRTRACE_EXIT(FILE_IMR+1);
return i+1;
}
parptr = (long*)(*mapptr + pbuffer);
offset = *(parptr);
if (offset < start_data || offset >= end_data)
{
SRVRTRACE_EXIT(FILE_IMR+1);
return i+1;
}
*parptr += (long)pbuffer;
}
SRVRTRACE_EXIT(FILE_IMR+1);
return CEE_SUCCESS;
}
//
//---------------- output parameters ---------------------------
//
//---------------- calculate the length ------------------------
//
void LIST_length( LIST_def* pname, long length, long& wlength, long& maplength)
{
if (pname->_buffer != NULL && pname->_length > 0)
{
wlength += ( pname->_length * length);
maplength += sizeof(long);
}
}
void OCTET_length( OCTET_def* pname, long& wlength, long& maplength)
{
if (pname->_buffer != NULL && pname->_length > 0)
{
wlength += pname->_length;
maplength += sizeof(long);
}
}
void STRING_length( IDL_string pname, long& wlength, long& maplength)
{
if (pname != NULL)
{
wlength += strlen(pname) + 1;
maplength += sizeof(long);
}
}
void ERROR_DESC_LIST_length( ERROR_DESC_LIST_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+2);
wlength += sizeof(ERROR_DESC_LIST_def);
LIST_length((LIST_def*) pname, sizeof(ERROR_DESC_def), wlength, maplength);
if (pname->_buffer != NULL && pname->_length > 0)
{
ERROR_DESC_def* pED;
for (unsigned int i = 0; i < pname->_length; i++)
{
pED = pname->_buffer + i;
STRING_length( pED->errorText, wlength, maplength);
STRING_length( pED->Param1, wlength, maplength);
STRING_length( pED->Param2, wlength, maplength);
STRING_length( pED->Param3, wlength, maplength);
STRING_length( pED->Param4, wlength, maplength);
STRING_length( pED->Param5, wlength, maplength);
STRING_length( pED->Param6, wlength, maplength);
STRING_length( pED->Param7, wlength, maplength);
}
}
SRVRTRACE_EXIT(FILE_IMR+2);
}
// New format
void ERROR_DESC_LIST_length( ERROR_DESC_LIST_def* pname, IDL_long& wlength)
{
IDL_unsigned_long i = 0;
wlength += sizeof(pname->_length);
if(pname->_length > 0 && pname->_buffer != NULL)
{
ERROR_DESC_def *ptr = pname->_buffer;
for(i = 0; i < pname->_length; i++)
{
wlength += sizeof(ptr->rowId);
wlength += sizeof(ptr->errorDiagnosticId);
wlength += sizeof(ptr->sqlcode);
wlength += sizeof(ptr->sqlstate);
wlength += sizeof(IDL_long);
if (ptr->errorText != NULL)
wlength += strlen(ptr->errorText) + 1;
wlength += sizeof(ptr->operationAbortId);
wlength += sizeof(ptr->errorCodeType);
wlength += sizeof(IDL_long);
if (ptr->Param1 != NULL)
wlength += strlen(ptr->Param1) + 1;
wlength += sizeof(IDL_long);
if (ptr->Param2 != NULL)
wlength += strlen(ptr->Param2) + 1;
wlength += sizeof(IDL_long);
if (ptr->Param3 != NULL)
wlength += strlen(ptr->Param3) + 1;
wlength += sizeof(IDL_long);
if (ptr->Param4 != NULL)
wlength += strlen(ptr->Param4) + 1;
wlength += sizeof(IDL_long);
if (ptr->Param5 != NULL)
wlength += strlen(ptr->Param5) + 1;
wlength += sizeof(IDL_long);
if (ptr->Param6 != NULL)
wlength += strlen(ptr->Param6) + 1;
wlength += sizeof(IDL_long);
if (ptr->Param7 != NULL)
wlength += strlen(ptr->Param7) + 1;
ptr++;
}
}
} // ERROR_DESC_LIST_length
void SRVR_CONTEXT_length( const SRVR_CONTEXT_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+3);
wlength += sizeof(SRVR_CONTEXT_def);
ENV_DESC_LIST_length( &pname->envDescList, wlength, maplength );
RES_DESC_LIST_length( &pname->resDescList, wlength, maplength );
SRVRTRACE_EXIT(FILE_IMR+3);
}
void DATASOURCE_CFG_LIST_length( const DATASOURCE_CFG_LIST_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+4);
wlength += sizeof(DATASOURCE_CFG_LIST_def);
LIST_length((LIST_def*)pname, sizeof(DATASOURCE_CFG_def), wlength, maplength);
if (pname->_buffer != NULL && pname->_length > 0)
{
DATASOURCE_CFG_def* pDCFG;
for (unsigned int i=0; i < pname->_length; i++)
{
pDCFG = pname->_buffer + i;
ENV_DESC_LIST_length( &pDCFG->EnvDescList, wlength, maplength );
RES_DESC_LIST_length( &pDCFG->ResDescList, wlength, maplength );
OCTET_length( (OCTET_def*)&pDCFG->DefineDescList, wlength, maplength);
}
}
SRVRTRACE_EXIT(FILE_IMR+4);
}
void SQLVALUE_LIST_length( const SQLValueList_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+5);
wlength += sizeof(SQLValueList_def);
LIST_length((LIST_def*)pname, sizeof(SQLValue_def), wlength, maplength);
if (pname->_buffer != NULL && pname->_length > 0)
{
SQLValue_def* pSQLValue;
for (unsigned int i=0; i < pname->_length; i++)
{
wlength += sizeof(SQLValue_def);
pSQLValue = pname->_buffer + i;
OCTET_length( (OCTET_def*)&pSQLValue->dataValue, wlength, maplength);
}
}
SRVRTRACE_EXIT(FILE_IMR+5);
}
// new format
void SQLVALUE_LIST_length(SQLValueList_def* pname, IDL_long& wlength)
{
IDL_unsigned_long i;
wlength += sizeof(pname->_length);
if(pname->_length > 0)
{
SQLValue_def *pSQLValue = pname->_buffer;
for(i = 0; i < pname->_length; i++)
{
wlength += sizeof(pSQLValue->dataType);
wlength += sizeof(pSQLValue->dataInd);
wlength += sizeof(pSQLValue->dataValue._length);
if(pSQLValue->dataValue._length > 0)
wlength += pSQLValue->dataValue._length;
wlength += sizeof(pSQLValue->dataCharset);
pSQLValue++;
}
}
} // SQLVALUE_LIST_length()
void SQLITEMDESC_LIST_length(SQLItemDescList_def* pname, IDL_long& wlength)
{
IDL_unsigned_long i;
IDL_unsigned_long tmpLength = 0;
wlength += sizeof(pname->_length);
if(pname->_length > 0)
{
tmpLength += sizeof(pname->_buffer->version);
tmpLength += sizeof(pname->_buffer->dataType);
tmpLength += sizeof(pname->_buffer->datetimeCode);
tmpLength += sizeof(pname->_buffer->maxLen);
tmpLength += sizeof(pname->_buffer->precision);
tmpLength += sizeof(pname->_buffer->scale);
tmpLength += sizeof(pname->_buffer->nullInfo);
tmpLength += sizeof(IDL_long); // length followed by data (colHeadingNm)
tmpLength += sizeof(pname->_buffer->signType);
tmpLength += sizeof(pname->_buffer->ODBCDataType);
tmpLength += sizeof(pname->_buffer->ODBCPrecision);
tmpLength += sizeof(pname->_buffer->SQLCharset);
tmpLength += sizeof(pname->_buffer->ODBCCharset);
tmpLength += sizeof(IDL_long); // length followed by data (TableName)
tmpLength += sizeof(IDL_long); // length followed by data (CatalogName)
tmpLength += sizeof(IDL_long); // length followed by data (SchemaName)
tmpLength += sizeof(IDL_long); // length followed by data (Heading)
tmpLength += sizeof(pname->_buffer->intLeadPrec);
tmpLength += sizeof(pname->_buffer->paramMode);
wlength += (pname->_length * tmpLength);
SQLItemDesc_def *pSQLItemDesc = pname->_buffer;
for(i = 0; i < pname->_length; i++)
{
if(pSQLItemDesc->colHeadingNm[0] != '\0')
wlength += (strlen(pSQLItemDesc->colHeadingNm) +1);
if(pSQLItemDesc->colHeadingNm[0] != '\0')
wlength += (strlen(pSQLItemDesc->TableName) +1);
if(pSQLItemDesc->colHeadingNm[0] != '\0')
wlength += (strlen(pSQLItemDesc->CatalogName) +1);
if(pSQLItemDesc->colHeadingNm[0] != '\0')
wlength += (strlen(pSQLItemDesc->SchemaName) +1);
if(pSQLItemDesc->colHeadingNm[0] != '\0')
wlength += (strlen(pSQLItemDesc->Heading) +1);
pSQLItemDesc++;
}
}
} // SQLITEMDESC_LIST_length()
void SRVR_STATUS_LIST_length( const SRVR_STATUS_LIST_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+6);
wlength += sizeof(SRVR_STATUS_LIST_def);
LIST_length((LIST_def*)pname, sizeof(SRVR_STATUS_def), wlength, maplength);
if (pname->_buffer != NULL && pname->_length > 0)
{
SRVR_STATUS_def* pSRVR;
for (unsigned int i=0; i < pname->_length; i++)
{
wlength += sizeof(SRVR_STATUS_def);
pSRVR = pname->_buffer + i;
STRING_length( pSRVR->userName, wlength, maplength);
STRING_length( pSRVR->windowText, wlength, maplength);
}
}
SRVRTRACE_EXIT(FILE_IMR+6);
}
void ENV_DESC_LIST_length( const ENV_DESC_LIST_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+7);
wlength += sizeof(ENV_DESC_LIST_def);
LIST_length((LIST_def*)pname, sizeof(ENV_DESC_def), wlength, maplength);
if (pname->_buffer != NULL && pname->_length > 0)
{
ENV_DESC_def* pED;
for (unsigned int i = 0; i < pname->_length; i++)
{
pED = pname->_buffer + i;
STRING_length( pED->VarVal, wlength, maplength);
}
}
SRVRTRACE_EXIT(FILE_IMR+7);
}
void RES_DESC_LIST_length( const RES_DESC_LIST_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+8);
wlength += sizeof(RES_DESC_LIST_def);
LIST_length((LIST_def*)pname, sizeof(RES_DESC_def), wlength, maplength);
if (pname->_buffer != NULL && pname->_length > 0)
{
RES_DESC_def* pRD;
for (unsigned int i = 0; i < pname->_length; i++)
{
pRD = pname->_buffer + i;
STRING_length( pRD->Action, wlength, maplength);
}
}
SRVRTRACE_EXIT(FILE_IMR+8);
}
void DATASOURCE_CFG_length( const DATASOURCE_CFG_def* pname, long& wlength, long& maplength )
{
SRVRTRACE_ENTER(FILE_IMR+9);
wlength += sizeof(DATASOURCE_CFG_def);
ENV_DESC_LIST_length( &pname->EnvDescList, wlength, maplength );
RES_DESC_LIST_length( &pname->ResDescList, wlength, maplength );
OCTET_length( (OCTET_def*)&pname->DefineDescList, wlength, maplength);
SRVRTRACE_EXIT(FILE_IMR+9);
}
//
//--------------------- copy parameters ------------------------
//
void IDL_charArray_copy(const IDL_char* pname, char*& curptr)
{
long length;
if (pname != NULL)
{
length = strlen(pname) + 1;
memcpy(curptr, pname,length);
curptr += length;
}
}
void IDL_charArray_Pad_copy(const IDL_char* pname, long length, char*& curptr)
{
if (pname != NULL)
{
memset(curptr,0,length);
memcpy(curptr, pname,length);
curptr += length;
}
}
void IDL_byteArray_copy(BYTE* pname, long length, char*& curptr)
{
if (pname != NULL)
{
memcpy(curptr, pname,length);
curptr += length;
}
}
/*
* for 64bit
*/
void Long_copy(Long* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(Long));
curptr += sizeof(Long);
}
void IDL_long_copy(IDL_long* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(IDL_long));
curptr += sizeof(IDL_long);
}
void IDL_unsigned_long_copy(IDL_unsigned_long* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(IDL_unsigned_long));
curptr += sizeof(IDL_unsigned_long);
}
void IDL_short_copy(IDL_short* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(IDL_short));
curptr += sizeof(IDL_short);
}
void IDL_unsigned_short_copy(IDL_unsigned_short* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(IDL_unsigned_short));
curptr += sizeof(IDL_unsigned_short);
}
void IDL_long_long_copy(IDL_long_long* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(IDL_long_long));
curptr += sizeof(IDL_long_long);
}
void IDL_unsigned_long_long_copy(IDL_unsigned_long_long* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(IDL_unsigned_long_long));
curptr += sizeof(IDL_unsigned_long_long);
}
void IDL_double_copy(double* pname, char*& curptr)
{
memcpy(curptr, pname, sizeof(double));
curptr += sizeof(double);
}
void LIST_copy( char* buffer, LIST_def* pname, LIST_def* parptr, long length, char*& curptr, long*& mapptr)
{
long* tmpptr;
if (pname->_buffer != NULL && pname->_length > 0)
{
tmpptr = (long*)&(parptr->_buffer);
*(mapptr++) = (char *)tmpptr - buffer;
*tmpptr = curptr - buffer;
memcpy(curptr, pname->_buffer, pname->_length * length);
curptr += pname->_length * length;
}
}
void OCTET_copy( char* buffer, OCTET_def* pname, OCTET_def* parptr, char*& curptr, long*& mapptr)
{
long* tmpptr;
if (pname->_buffer != NULL && pname->_length > 0)
{
tmpptr = (long*)&(parptr->_buffer);
*(mapptr++) = (char *)tmpptr - buffer;
*tmpptr = curptr - buffer;
memcpy(curptr, pname->_buffer, pname->_length);
curptr += pname->_length;
}
}
void STRING_copy( char* buffer, IDL_string pname, IDL_string* parptr, char*& curptr, long*& mapptr)
{
long length;
long* tmpptr;
if (pname != NULL)
{
tmpptr = (long*)parptr;
*(mapptr++) = (char *)tmpptr - buffer;
*tmpptr = curptr - buffer;
length = strlen(pname) + 1;
memcpy(curptr,pname, length);
curptr += length;
}
}
void ERROR_DESC_LIST_copy( char* buffer, ERROR_DESC_LIST_def* pname, ERROR_DESC_LIST_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+10);
memcpy(curptr, pname, sizeof(ERROR_DESC_LIST_def));
curptr += sizeof(ERROR_DESC_LIST_def);
LIST_copy( buffer, (LIST_def*)pname, (LIST_def*) parptr, sizeof(ERROR_DESC_def), curptr, mapptr);
if (pname->_buffer != NULL && pname->_length > 0)
{
ERROR_DESC_def* pED;
ERROR_DESC_def* pEDpar;
for (unsigned int i = 0; i < pname->_length; i++)
{
pED = pname->_buffer + i;
pEDpar = (ERROR_DESC_def*)((ULONG)parptr->_buffer + (ULONG)buffer + i*sizeof(ERROR_DESC_def));
STRING_copy( buffer, pED->errorText, &pEDpar->errorText, curptr, mapptr);
STRING_copy( buffer, pED->Param1, &pEDpar->Param1, curptr, mapptr);
STRING_copy( buffer, pED->Param2, &pEDpar->Param2, curptr, mapptr);
STRING_copy( buffer, pED->Param3, &pEDpar->Param3, curptr, mapptr);
STRING_copy( buffer, pED->Param4, &pEDpar->Param4, curptr, mapptr);
STRING_copy( buffer, pED->Param5, &pEDpar->Param5, curptr, mapptr);
STRING_copy( buffer, pED->Param6, &pEDpar->Param6, curptr, mapptr);
STRING_copy( buffer, pED->Param7, &pEDpar->Param7, curptr, mapptr);
}
}
SRVRTRACE_EXIT(FILE_IMR+10);
}
// marshalling - new format
void ERROR_DESC_LIST_copy(ERROR_DESC_LIST_def* pname, IDL_char*& curptr)
{
IDL_unsigned_long i = 0;
IDL_long tmpLength;
IDL_unsigned_long_copy(&pname->_length, curptr);
if(pname->_length > 0 && pname->_buffer != NULL)
{
ERROR_DESC_def *ptr = pname->_buffer;
for(i = 0; i < pname->_length; i++)
{
IDL_long_copy(&ptr->rowId, curptr);
IDL_long_copy(&ptr->errorDiagnosticId, curptr);
IDL_long_copy(&ptr->sqlcode, curptr);
strncpy(curptr,ptr->sqlstate,sizeof(ptr->sqlstate));
curptr += sizeof(ptr->sqlstate);
tmpLength = (ptr->errorText == NULL) ? 0 : strlen(ptr->errorText);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->errorText,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
IDL_long_copy(&ptr->operationAbortId,curptr);
IDL_long_copy(&ptr->errorCodeType,curptr);
tmpLength = (ptr->Param1 == NULL) ? 0 : strlen(ptr->Param1);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param1,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
tmpLength = (ptr->Param2 == NULL) ? 0 : strlen(ptr->Param2);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param2,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
tmpLength = (ptr->Param3 == NULL) ? 0 : strlen(ptr->Param3);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param3,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
tmpLength = (ptr->Param4 == NULL) ? 0 : strlen(ptr->Param4);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param4,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
tmpLength = (ptr->Param5 == NULL) ? 0 : strlen(ptr->Param5);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param5,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
tmpLength = (ptr->Param6 == NULL) ? 0 : strlen(ptr->Param6);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param6,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
tmpLength = (ptr->Param7 == NULL) ? 0 : strlen(ptr->Param7);
if(tmpLength > 0)
{
tmpLength++; // null terminator
IDL_long_copy(&tmpLength,curptr);
IDL_charArray_copy(ptr->Param7,curptr);
}
else
IDL_long_copy(&tmpLength,curptr);
ptr++;
}
}
} /* ERROR_DESC_LIST_copy() */
void SRVR_CONTEXT_copy( char* buffer, const SRVR_CONTEXT_def* pname, SRVR_CONTEXT_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+11);
memcpy(curptr, pname, sizeof(SRVR_CONTEXT_def));
curptr += sizeof(SRVR_CONTEXT_def);
ENV_DESC_LIST_copy(buffer, &pname->envDescList, &parptr->envDescList, curptr, mapptr);
RES_DESC_LIST_copy(buffer, &pname->resDescList, &parptr->resDescList, curptr, mapptr);
SRVRTRACE_EXIT(FILE_IMR+11);
}
void DATASOURCE_CFG_LIST_copy( char* buffer, const DATASOURCE_CFG_LIST_def* pname, DATASOURCE_CFG_LIST_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+12);
memcpy(curptr, pname, sizeof(DATASOURCE_CFG_LIST_def));
curptr += sizeof(DATASOURCE_CFG_LIST_def);
LIST_copy( buffer, (LIST_def*)pname, (LIST_def*)parptr, sizeof(DATASOURCE_CFG_def), curptr, mapptr);
if (pname->_buffer != NULL && pname->_length > 0)
{
DATASOURCE_CFG_def* pDCFG;
DATASOURCE_CFG_def* pDCFGpar;
for (unsigned int i=0; i < pname->_length; i++)
{
pDCFG = pname->_buffer + i;
pDCFGpar = (DATASOURCE_CFG_def*)((ULONG)parptr->_buffer + (ULONG)buffer + i*sizeof(DATASOURCE_CFG_def));
ENV_DESC_LIST_copy(buffer, &pDCFG->EnvDescList, &pDCFGpar->EnvDescList, curptr, mapptr);
RES_DESC_LIST_copy(buffer, &pDCFG->ResDescList, &pDCFGpar->ResDescList, curptr, mapptr);
OCTET_copy( buffer, (OCTET_def*)&pDCFG->DefineDescList, (OCTET_def*)&pDCFGpar->DefineDescList, curptr, mapptr);
}
}
SRVRTRACE_EXIT(FILE_IMR+12);
}
void SQLVALUE_LIST_copy( char* buffer, const SQLValueList_def* pname, SQLValueList_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+13);
memcpy(curptr, pname, sizeof(SQLValueList_def));
curptr += sizeof(SQLValueList_def);
LIST_copy( buffer, (LIST_def*)pname, (LIST_def*)parptr, sizeof(SQLValue_def), curptr, mapptr);
if (pname->_buffer != NULL && pname->_length > 0)
{
SQLValue_def* pSQLValue;
SQLValue_def* pSQLValuepar;
for (unsigned int i=0; i < pname->_length; i++)
{
pSQLValue = pname->_buffer + i;
pSQLValuepar = (SQLValue_def*)((ULONG)parptr->_buffer + (ULONG)buffer + i*sizeof(SQLValue_def));
OCTET_copy( buffer, (OCTET_def*)&pSQLValue->dataValue, (OCTET_def*)&pSQLValuepar->dataValue, curptr, mapptr);
}
}
SRVRTRACE_EXIT(FILE_IMR+13);
}
// new format
void SQLVALUE_LIST_copy(SQLValueList_def* pname, IDL_char*& curptr)
{
IDL_unsigned_long i;
IDL_unsigned_long_copy(&pname->_length, curptr);
if(pname->_length > 0)
{
SQLValue_def *pSQLValue = pname->_buffer;
for(i = 0; i < pname->_length; i++)
{
IDL_long_copy(&pSQLValue->dataType,curptr);
IDL_short_copy(&pSQLValue->dataInd,curptr);
IDL_unsigned_long_copy(&pSQLValue->dataValue._length, curptr);
if(pSQLValue->dataValue._length > 0)
IDL_byteArray_copy(pSQLValue->dataValue._buffer,pSQLValue->dataValue._length,curptr);
IDL_long_copy(&pSQLValue->dataCharset,curptr);
pSQLValue++;
}
}
} // SQLVALUE_LIST_copy()
// new format
void SQLITEMDESC_LIST_copy(SQLItemDescList_def* pname, IDL_char*& curptr)
{
IDL_unsigned_long i;
IDL_long colHeadingNmLength = 0;
IDL_long TableNameLength = 0;
IDL_long CatalogNameLength = 0;
IDL_long SchemaNameLength = 0;
IDL_long HeadingLength = 0;
IDL_unsigned_long_copy(&pname->_length, curptr);
if(pname->_length > 0 && pname->_buffer != NULL)
{
SQLItemDesc_def *pSQLItemDesc = pname->_buffer;
for(i = 0; i < pname->_length; i++)
{
IDL_long_copy(&pSQLItemDesc->version,curptr);
IDL_long_copy(&pSQLItemDesc->dataType,curptr);
IDL_long_copy(&pSQLItemDesc->datetimeCode,curptr);
IDL_long_copy(&pSQLItemDesc->maxLen,curptr);
IDL_short_copy(&pSQLItemDesc->precision,curptr);
IDL_short_copy(&pSQLItemDesc->scale,curptr);
IDL_byteArray_copy(&pSQLItemDesc->nullInfo,sizeof(pSQLItemDesc->nullInfo),curptr);
if(pSQLItemDesc->colHeadingNm[0] != '\0')
colHeadingNmLength = (strlen(pSQLItemDesc->colHeadingNm) +1);
else
colHeadingNmLength = 0;
IDL_long_copy(&colHeadingNmLength,curptr);
if(colHeadingNmLength > 0)
IDL_charArray_copy(pSQLItemDesc->colHeadingNm,curptr);
IDL_byteArray_copy(&pSQLItemDesc->signType,sizeof(pSQLItemDesc->signType),curptr);
IDL_long_copy(&pSQLItemDesc->ODBCDataType,curptr);
IDL_short_copy(&pSQLItemDesc->ODBCPrecision,curptr);
IDL_long_copy(&pSQLItemDesc->SQLCharset,curptr);
IDL_long_copy(&pSQLItemDesc->ODBCCharset,curptr);
if(pSQLItemDesc->TableName[0] != '\0')
TableNameLength = (strlen(pSQLItemDesc->TableName) +1);
else
TableNameLength = 0;
IDL_long_copy(&TableNameLength,curptr);
if(TableNameLength > 0)
IDL_charArray_copy(pSQLItemDesc->TableName,curptr);
if(pSQLItemDesc->CatalogName[0] != '\0')
CatalogNameLength = (strlen(pSQLItemDesc->CatalogName) +1);
else
CatalogNameLength = 0;
IDL_long_copy(&CatalogNameLength,curptr);
if(CatalogNameLength > 0)
IDL_charArray_copy(pSQLItemDesc->CatalogName,curptr);
if(pSQLItemDesc->SchemaName[0] != '\0')
SchemaNameLength = (strlen(pSQLItemDesc->SchemaName) +1);
else
SchemaNameLength = 0;
IDL_long_copy(&SchemaNameLength,curptr);
if(SchemaNameLength > 0)
IDL_charArray_copy(pSQLItemDesc->SchemaName,curptr);
if(pSQLItemDesc->Heading[0] != '\0')
HeadingLength = (strlen(pSQLItemDesc->Heading) +1);
else
HeadingLength = 0;
IDL_long_copy(&HeadingLength,curptr);
if(HeadingLength > 0)
IDL_charArray_copy(pSQLItemDesc->Heading,curptr);
IDL_long_copy(&pSQLItemDesc->intLeadPrec,curptr);
IDL_long_copy(&pSQLItemDesc->paramMode,curptr);
pSQLItemDesc++;
}
}
} // SQLVALUE_LIST_copy()
void SRVR_STATUS_LIST_copy(char* buffer, const SRVR_STATUS_LIST_def* pname, SRVR_STATUS_LIST_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+14);
memcpy(curptr, pname, sizeof(SRVR_STATUS_LIST_def));
curptr += sizeof(SRVR_STATUS_LIST_def);
LIST_copy( buffer, (LIST_def*)pname, (LIST_def*)parptr, sizeof(SRVR_STATUS_def), curptr, mapptr);
if (pname->_buffer != NULL && pname->_length > 0)
{
SRVR_STATUS_def* pSRVR;
SRVR_STATUS_def* pSRVRpar;
for (unsigned int i=0; i < pname->_length; i++)
{
pSRVR = pname->_buffer + i;
pSRVRpar = (SRVR_STATUS_def*)((ULONG)parptr->_buffer + (ULONG)buffer + i*sizeof(SRVR_STATUS_def));
STRING_copy( buffer, pSRVR->userName, &pSRVRpar->userName, curptr, mapptr);
STRING_copy( buffer, pSRVR->windowText, &pSRVRpar->windowText, curptr, mapptr);
}
}
SRVRTRACE_EXIT(FILE_IMR+14);
}
void ENV_DESC_LIST_copy(char* buffer, const ENV_DESC_LIST_def* pname, ENV_DESC_LIST_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+15);
memcpy(curptr, pname, sizeof(ENV_DESC_LIST_def));
curptr += sizeof(ENV_DESC_LIST_def);
LIST_copy( buffer, (LIST_def*)pname, (LIST_def*)parptr, sizeof(ENV_DESC_def), curptr, mapptr);
if (pname->_buffer != NULL && pname->_length > 0)
{
ENV_DESC_def* pED;
ENV_DESC_def* pEDpar;
for (unsigned int i = 0; i < pname->_length; i++)
{
pED = pname->_buffer + i;
pEDpar = (ENV_DESC_def*)((ULONG)parptr->_buffer + (ULONG)buffer + i*sizeof(ENV_DESC_def));
STRING_copy( buffer, pED->VarVal, &pEDpar->VarVal, curptr, mapptr);
}
}
SRVRTRACE_EXIT(FILE_IMR+15);
}
void RES_DESC_LIST_copy(char* buffer, const RES_DESC_LIST_def* pname, RES_DESC_LIST_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+16);
memcpy(curptr, pname, sizeof(RES_DESC_LIST_def));
curptr += sizeof(RES_DESC_LIST_def);
LIST_copy( buffer, (LIST_def*)pname, (LIST_def*)parptr, sizeof(RES_DESC_def), curptr, mapptr);
if (pname->_buffer != NULL && pname->_length > 0)
{
RES_DESC_def* pRD;
RES_DESC_def* pRDpar;
for (unsigned int i = 0; i < pname->_length; i++)
{
pRD = pname->_buffer + i;
pRDpar = (RES_DESC_def*)((ULONG)parptr->_buffer + (ULONG)buffer + i*sizeof(RES_DESC_def));
STRING_copy( buffer, pRD->Action, &pRDpar->Action, curptr, mapptr);
}
}
SRVRTRACE_EXIT(FILE_IMR+16);
}
void DATASOURCE_CFG_copy( char* buffer, const DATASOURCE_CFG_def* pname, DATASOURCE_CFG_def* parptr, char*& curptr, long*& mapptr)
{
SRVRTRACE_ENTER(FILE_IMR+17);
memcpy(curptr, pname, sizeof(DATASOURCE_CFG_def));
curptr += sizeof(DATASOURCE_CFG_def);
ENV_DESC_LIST_copy(buffer, &pname->EnvDescList, &parptr->EnvDescList, curptr, mapptr);
RES_DESC_LIST_copy(buffer, &pname->ResDescList, &parptr->ResDescList, curptr, mapptr);
OCTET_copy( buffer, (OCTET_def*)&pname->DefineDescList, (OCTET_def*)&parptr->DefineDescList, curptr, mapptr);
SRVRTRACE_EXIT(FILE_IMR+17);
}