fis-gtm/sr_port/op_fnj2.c

82 lines
1.8 KiB
C

/****************************************************************
* *
* Copyright 2001, 2009 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include "gtm_string.h"
#include "stringpool.h"
#include "op.h"
GBLREF spdesc stringpool;
error_def(ERR_MAXSTRLEN);
#ifdef UNICODE_SUPPORTED
#include "gtm_utf8.h"
GBLREF boolean_t badchar_inhibit;
void op_fnj2(mval *src, int len, mval *dst)
{
unsigned char *cp;
int n, size;
if (len > MAX_STRLEN)
rts_error(VARLSTCNT(1) ERR_MAXSTRLEN);
MV_FORCE_STR(src);
MV_FORCE_LEN(src);
n = len - src->str.char_len;
if (n <= 0)
{
*dst = *src;
dst->mvtype &= ~MV_ALIASCONT; /* Make sure alias container property does not pass */
} else
{
size = src->str.len + n;
if (size > MAX_STRLEN)
rts_error(VARLSTCNT(1) ERR_MAXSTRLEN);
ENSURE_STP_FREE_SPACE(size);
cp = stringpool.free;
stringpool.free += size;
memset(cp, SP, n);
memcpy(cp + n, src->str.addr, src->str.len);
MV_INIT_STRING(dst, size, (char *)cp);
}
return;
}
#endif /* UNICODE_SUPPORTED */
void op_fnzj2(mval *src, int len, mval *dst)
{
unsigned char *cp;
int n;
if (len > MAX_STRLEN)
rts_error(VARLSTCNT(1) ERR_MAXSTRLEN);
MV_FORCE_STR(src);
n = len - src->str.len;
if (n <= 0)
{
*dst = *src;
dst->mvtype &= ~MV_ALIASCONT; /* Make sure alias container property does not pass */
} else
{
ENSURE_STP_FREE_SPACE(len);
cp = stringpool.free;
stringpool.free += len;
memset(cp, SP, n);
memcpy(cp + n, src->str.addr, src->str.len);
MV_INIT_STRING(dst, len, (char *)cp);
}
return;
}