82 lines
1.8 KiB
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;
|
|
}
|