ARSperl
view release on metacpan or search on metacpan
/* this one is for decoding assign (set) field actions in active links
* and/or filters.
*/
SV *
perl_ARValueStruct_Assign(ARControlStruct * ctrl, ARValueStruct * in)
{
ARStatusList status;
int i;
Zero(&status, 1, ARStatusList);
switch (in->dataType) {
case AR_DATA_TYPE_KEYWORD:
for (i = 0; KeyWordMap[i].number != TYPEMAP_LAST; i++) {
if (KeyWordMap[i].number == in->u.keyNum)
break;
}
return newSVpv(KeyWordMap[i].name, KeyWordMap[i].len);
break;
case AR_DATA_TYPE_INTEGER:
return newSViv(in->u.intVal);
case AR_DATA_TYPE_REAL:
return newSVnv(in->u.realVal);
case AR_DATA_TYPE_DIARY: /* this is the set-fields special
* case */
case AR_DATA_TYPE_CHAR:
return newSVpv(in->u.charVal, 0);
case AR_DATA_TYPE_ENUM:
return newSViv(in->u.enumVal);
case AR_DATA_TYPE_TIME:
return newSViv(in->u.timeVal);
case AR_DATA_TYPE_BITMASK:
return newSViv(in->u.maskVal);
#if AR_EXPORT_VERSION >= 3
case AR_DATA_TYPE_BYTES:
return perl_ARByteList(ctrl, in->u.byteListVal);
case AR_DATA_TYPE_ULONG:
return newSViv(in->u.ulongVal); /* FIX -- does perl have
* unsigned long? */
case AR_DATA_TYPE_COORDS:
return perl_ARList(ctrl,
(ARList *) in->u.coordListVal,
(ARS_fn) perl_ARCoordStruct,
sizeof(ARCoordStruct));
#endif
#if AR_EXPORT_VERSION >= 7L
case AR_DATA_TYPE_TIME_OF_DAY:
return newSViv(in->u.timeOfDayVal);
case AR_DATA_TYPE_DATE:
return newSViv(in->u.dateVal);
case AR_DATA_TYPE_CURRENCY:
return perl_ARCurrencyStruct(ctrl, in->u.currencyVal);
case AR_DATA_TYPE_VIEW:
case AR_DATA_TYPE_DISPLAY:
return newSVpv(in->u.charVal, 0);
#endif
#if AR_EXPORT_VERSION >= 4
case AR_DATA_TYPE_ATTACH:
return perl_ARAttach(ctrl, in->u.attachVal);
case AR_DATA_TYPE_DECIMAL:
return newSVpv(in->u.decimalVal, 0);
#endif
case AR_DATA_TYPE_NULL:
return newSVsv(&PL_sv_undef);
default:
{
char dt[128];
sprintf(dt, "%u (in function perl_ARValueStruct_Assign)", in->dataType);
ARError_add(AR_RETURN_WARNING, AP_ERR_DATATYPE);
ARError_add(AR_RETURN_WARNING, AP_ERR_CONTINUE, dt);
}
return newSVsv(&PL_sv_undef); /* FIX */
}
}
/* this one is for "normal" field/value decoding */
SV *
perl_ARValueStruct(ARControlStruct * ctrl, ARValueStruct * in)
{
ARDiaryList diaryList;
ARStatusList status;
int ret, i;
Zero(&status, 1, ARStatusList);
switch (in->dataType) {
case AR_DATA_TYPE_KEYWORD:
for (i = 0; KeyWordMap[i].number != TYPEMAP_LAST; i++) {
if (KeyWordMap[i].number == in->u.keyNum)
break;
}
return newSVpv(KeyWordMap[i].name, KeyWordMap[i].len);
break;
case AR_DATA_TYPE_INTEGER:
return newSViv(in->u.intVal);
case AR_DATA_TYPE_REAL:
return newSVnv(in->u.realVal);
case AR_DATA_TYPE_CHAR:
return newSVpv(in->u.charVal, 0);
case AR_DATA_TYPE_DIARY:
#if AR_EXPORT_VERSION >= 4
ret = ARDecodeDiary(ctrl, in->u.diaryVal, &diaryList, &status);
#else
ret = ARDecodeDiary(in->u.diaryVal, &diaryList, &status);
#endif
if (ARError(ret, status)) {
return newSVsv(&PL_sv_undef);
} else {
SV *array;
array = perl_ARList(ctrl,
(ARList *) & diaryList,
(ARS_fn) perl_diary,
sizeof(ARDiaryStruct));
FreeARDiaryList(&diaryList, FALSE);
return array;
}
case AR_DATA_TYPE_ENUM:
return newSViv(in->u.enumVal);
case AR_DATA_TYPE_TIME:
return newSViv(in->u.timeVal);
case AR_DATA_TYPE_BITMASK:
return newSViv(in->u.maskVal);
#if AR_EXPORT_VERSION >= 3
case AR_DATA_TYPE_BYTES:
return perl_ARByteList(ctrl, in->u.byteListVal);
case AR_DATA_TYPE_ULONG:
return newSViv(in->u.ulongVal); /* FIX -- does perl have
* unsigned long? */
case AR_DATA_TYPE_COORDS:
return perl_ARList(ctrl,
(ARList *) in->u.coordListVal,
(ARS_fn) perl_ARCoordStruct,
sizeof(ARCoordStruct));
#endif
#if AR_EXPORT_VERSION >= 4
case AR_DATA_TYPE_ATTACH:
return perl_ARAttach(ctrl, in->u.attachVal);
case AR_DATA_TYPE_DECIMAL:
return newSVpv(in->u.decimalVal, 0);
#endif
#if AR_EXPORT_VERSION >= 7L
case AR_DATA_TYPE_TIME_OF_DAY:
return newSViv(in->u.timeOfDayVal);
case AR_DATA_TYPE_DATE:
return newSViv(in->u.dateVal);
case AR_DATA_TYPE_CURRENCY:
return perl_ARCurrencyStruct(ctrl, in->u.currencyVal);
#endif
case AR_DATA_TYPE_NULL:
default:
return newSVsv(&PL_sv_undef); /* FIX */
}
}
SV *
perl_ARStatHistoryValue(ARControlStruct * ctrl, ARStatHistoryValue * in)
{
HV *hash = newHV();
hv_store(hash, "userOrTime", strlen("userOrTime") , newSViv(in->userOrTime), 0);
hv_store(hash, "enumVal", strlen("enumVal") , newSViv(in->enumVal), 0);
return newRV_noinc((SV *) hash);
}
#if AR_EXPORT_VERSION >= 7L
SV *
perl_ARCurrencyPartStruct( ARControlStruct *ctrl, ARCurrencyPartStruct *p ){
SV *ret;
{
HV *hash;
hash = newHV();
{
SV *val;
val = newSVpv( p->currencyCode, 0 );
ret = val;
}
hv_store( hash, "currencyCode", 12, ret, 0 );
{
SV *val;
val = newSViv( p->partTag );
ret = val;
}
hv_store( hash, "partTag", 7, ret, 0 );
{
SV *val;
val = newSViv( p->fieldId );
ret = val;
}
hv_store( hash, "fieldId", 7, ret, 0 );
ret = newRV_noinc((SV *) hash);
}
return ret;
break;
}
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_ENUM:
/*
* as of 5.x, eunmLimits went from a list of ARNameType
* to an AREnumLimitsStruct (true for 5.0.1 and beyond -
* 5.0beta still had it as a list of NameTypes)
*/
#if AR_EXPORT_VERSION >= 6L
DBG( ("case ENUM api v6+\n") );
hv_store(hash, "enumLimits", strlen("enumLimits") ,
perl_AREnumLimitsStruct(ctrl,
&(in->u.enumLimits))
,0
);
#else
DBG( ("case ENUM api v-6\n") );
hv_store(hash, "enumLimits", strlen("enumLimits") ,
perl_ARList(ctrl, (ARList *) & (in->u.enumLimits),
(ARS_fn) perl_ARNameType,
sizeof(ARNameType)),
0);
#endif
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_TIME:
return &PL_sv_undef;
case AR_DATA_TYPE_BITMASK:
DBG( ("case BITMASK\n") );
#if AR_EXPORT_VERSION >= 6L
hv_store(hash, "maskLimits", strlen("maskLimits") ,
perl_AREnumLimitsStruct(ctrl,
&(in->u.enumLimits))
,0
);
#else
hv_store(hash, "maskLimits", strlen("maskLimits") ,
perl_ARList(ctrl, (ARList *) & (in->u.enumLimits),
(ARS_fn) perl_ARNameType,
sizeof(ARNameType)),
0);
#endif
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_BYTES:
return &PL_sv_undef;
case AR_DATA_TYPE_DECIMAL:
hv_store(hash, "rangeLow", strlen("rangeLow") , newSVpv(in->u.decimalLimits.rangeLow, 0), 0);
hv_store(hash, "rangeHigh", strlen("rangeHigh") , newSVpv(in->u.decimalLimits.rangeHigh, 0), 0);
hv_store(hash, "precision", strlen("precision") , newSViv(in->u.decimalLimits.precision), 0);
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_ATTACH:
hv_store(hash, "maxSize", strlen("maxSize") , newSViv(in->u.attachLimits.maxSize), 0);
hv_store(hash, "attachType", strlen("attachType") , newSViv(in->u.attachLimits.attachType), 0);
return newRV_noinc((SV *) hash);
#if AR_EXPORT_VERSION >= 7
case AR_DATA_TYPE_CURRENCY:
hv_store(hash, "rangeLow", strlen("rangeLow") , newSVpv(in->u.currencyLimits.rangeLow, 0), 0);
hv_store(hash, "rangeHigh", strlen("rangeHigh") , newSVpv(in->u.currencyLimits.rangeHigh, 0), 0);
hv_store(hash, "precision", strlen("precision") , newSViv(in->u.currencyLimits.precision), 0);
hv_store(hash, "functionalCurrencies", strlen("functionalCurrencies"), perl_ARCurrencyDetailList(ctrl,&(in->u.currencyLimits.functionalCurrencies)), 0 );
hv_store(hash, "allowableCurrencies", strlen("allowableCurrencies"), perl_ARCurrencyDetailList(ctrl,&(in->u.currencyLimits.allowableCurrencies)), 0 );
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_DATE:
return &PL_sv_undef;
case AR_DATA_TYPE_TIME_OF_DAY:
return &PL_sv_undef;
#endif
case AR_DATA_TYPE_TABLE:
hv_store(hash, "numColumns", strlen("numColumns") , newSViv(in->u.tableLimits.numColumns), 0);
hv_store(hash, "qualifier", strlen("qualifier"), newRV_inc((SV*) perl_qualifier(ctrl,&(in->u.tableLimits.qualifier))), 0);
hv_store(hash, "maxRetrieve", strlen("maxRetrieve") , newSViv(in->u.tableLimits.maxRetrieve), 0);
hv_store(hash, "schema", strlen("schema") , newSVpv(in->u.tableLimits.schema, 0), 0);
hv_store(hash, "server", strlen("server") , newSVpv(in->u.tableLimits.server, 0), 0);
#if AR_EXPORT_VERSION >= 8L
hv_store(hash, "sampleSchema", strlen("sampleSchema") , newSVpv(in->u.tableLimits.sampleSchema, 0), 0);
hv_store(hash, "sampleServer", strlen("sampleServer") , newSVpv(in->u.tableLimits.sampleServer, 0), 0);
#endif
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_COLUMN:
hv_store(hash, "parent", strlen("parent"), perl_ARInternalId(ctrl, &(in->u.columnLimits.parent)), 0);
hv_store(hash, "dataField", strlen("dataField"), perl_ARInternalId(ctrl, &(in->u.columnLimits.dataField)), 0);
#if AR_EXPORT_VERSION >= 6L
hv_store(hash, "dataSource", strlen("dataSource") , newSViv(in->u.columnLimits.dataSource), 0);
#endif
hv_store(hash, "colLength", strlen("colLength") , newSViv(in->u.columnLimits.colLength), 0);
return newRV_noinc((SV *) hash);
#if AR_EXPORT_VERSION >= 6L
case AR_DATA_TYPE_VIEW:
hv_store(hash, "maxLength", strlen("maxLength") , newSViv(in->u.viewLimits.maxLength), 0);
return newRV_noinc((SV *) hash);
case AR_DATA_TYPE_DISPLAY:
hv_store(hash, "maxLength", strlen("maxLength") , newSViv(in->u.displayLimits.maxLength), 0);
#if AR_API_VERSION >= 14
switch (in->u.charLimits.lengthUnits) {
case AR_LENGTH_UNIT_BYTE:
hv_store(hash, "lengthUnits", strlen("lengthUnits") , newSVpv("byte", 0), 0);
break;
case AR_LENGTH_UNIT_CHAR:
hv_store(hash, "lengthUnits", strlen("lengthUnits") , newSVpv("char", 0), 0);
break;
}
#endif
return newRV_noinc((SV *) hash);
#endif
case AR_DATA_TYPE_NULL:
default:
HV *sort = newHV();
hv_store(sort, "fieldId", strlen("fieldId") , newSViv(in->sortList[i].fieldId), 0);
hv_store(sort, "sortOrder", strlen("sortOrder") , newSViv(in->sortList[i].sortOrder), 0);
av_push(array, newRV_noinc((SV *) sort));
}
return newRV_noinc((SV *) array);
}
#if AR_EXPORT_VERSION >= 8L
SV *
perl_ARArchiveInfoStruct(ARControlStruct * ctrl, ARArchiveInfoStruct * in)
{
HV *hash = newHV();
unsigned int i;
SV *qual = newSViv(0);
if(in->enable)
hv_store(hash, "enable", strlen("enable") ,
newSVpv("true", 0), 0);
else
hv_store(hash, "enable", strlen("enable") ,
newSVpv("false", 0), 0);
hv_store(hash, "archiveType", strlen("archiveType") , newSViv(in->archiveType), 0);
i = in->archiveType;
if ((i & AR_ARCHIVE_FORM) || (i & AR_ARCHIVE_DELETE))
hv_store(hash, "formName", strlen("formName") ,
newSVpv(in->u.formName, 0), 0);
if ((i & AR_ARCHIVE_FILE_XML) || (i & AR_ARCHIVE_FILE_ARX))
hv_store(hash, "dirPath", strlen("dirPath") ,
newSVpv(in->u.dirPath, 0), 0);
hv_store(hash, "query", strlen("query"),
newRV_inc((SV*) perl_qualifier(ctrl,&(in->query))), 0);
hv_store(hash, "query", strlen("query") , qual, 0);
hv_store(hash, "TmMonthDayMask", strlen("TmMonthDayMask") ,
newSViv(in->archiveTime.monthday), 0);
hv_store(hash, "TmWeekDayMask", strlen("TmWeekDayMask") ,
newSViv(in->archiveTime.weekday), 0);
hv_store(hash, "TmHourMask", strlen("TmHourMask") ,
newSViv(in->archiveTime.hourmask), 0);
hv_store(hash, "TmMinute", strlen("TmMinute") ,
newSViv(in->archiveTime.minute), 0);
hv_store(hash, "archiveFrom", strlen("archiveFrom") ,
newSVpv(in->archiveFrom, 0), 0);
return newRV_noinc((SV *) hash);
}
#endif
#if AR_EXPORT_VERSION >= 4
SV *
perl_ARAttach(ARControlStruct * ctrl, ARAttachStruct * in)
{
HV *hash = newHV();
SV *buffer;
SV *name;
SV *size;
SV *csize;
char *str = "Use ars_GetEntryBLOB or OO->getAttachment to extract the attachment";
/*
* at this point, the loc structure is not actually used ...
*/
buffer = newSVpv( str, strlen(str) );
name = newSVpv( in->name, strlen(in->name) );
size = newSViv(in->origSize);
csize = newSViv(in->compSize);
hv_store(hash, "name", strlen("name") , name, 0);
hv_store(hash, "value", strlen("value") , buffer, 0);
hv_store(hash, "origSize", strlen("origSize") , size, 0);
hv_store(hash, "compSize", strlen("compSize") , csize, 0);
return newRV_noinc((SV *) hash);
}
#endif
#if AR_CURRENT_API_VERSION >= 14
SV *
perl_ARImageDataStruct(ARControlStruct * ctrl, ARImageDataStruct * in)
{
SV *byte_list;
if( in->numItems == 0 ){
return newSVsv(&PL_sv_undef);
}
byte_list = newSVpv((char *) in->bytes, in->numItems);
return byte_list;
}
#endif
SV *
perl_ARByteList(ARControlStruct * ctrl, ARByteList * in)
{
HV *hash;
SV *byte_list;
int i;
if( in->numItems == 0 ){
return newSVsv(&PL_sv_undef);
}
hash = newHV();
byte_list = newSVpv((char *) in->bytes, in->numItems);
for (i = 0; ByteListTypeMap[i].number != TYPEMAP_LAST; i++) {
if (ByteListTypeMap[i].number == in->type)
break;
}
hv_store(hash, "type", strlen("type") , newSVpv( ByteListTypeMap[i].name, strlen(ByteListTypeMap[i].name) ), 0);
hv_store(hash, "value", strlen("value") , byte_list, 0);
return newRV_noinc((SV *) hash);
}
SV *
perl_ARCoordStruct(ARControlStruct * ctrl, ARCoordStruct * in)
{
case AR_DATA_TYPE_DATE:
out->u.dateVal = SvIV(in);
break;
case AR_DATA_TYPE_TIME_OF_DAY:
out->u.timeOfDayVal = SvIV(in);
break;
case AR_DATA_TYPE_CURRENCY:
out->u.currencyVal = MALLOCNN(sizeof(ARCurrencyStruct));
if( sv_to_ARCurrencyStruct(ctrl,in,out->u.currencyVal) == -1 )
return -1;
break;
#endif /* 7L */
#if AR_EXPORT_VERSION >= 3
case AR_DATA_TYPE_BYTES:
if (SvROK(in)) {
if (SvTYPE(hash = (HV *) SvRV(in)) == SVt_PVHV) {
fetch = hv_fetch(hash, "type", 4, FALSE);
if (!fetch) {
ARError_add(AR_RETURN_ERROR, AP_ERR_BYTE_LIST);
return -1;
}
type = *fetch;
if (!(SvOK(type) && SvTYPE(type) < SVt_PVAV)) {
ARError_add(AR_RETURN_ERROR, AP_ERR_BYTE_LIST);
return -1;
}
fetch = hv_fetch(hash, "value", strlen("value") , FALSE);
if (!fetch) {
ARError_add(AR_RETURN_ERROR, AP_ERR_BYTE_LIST);
return -1;
}
val = *fetch;
if (!(SvOK(val) && SvTYPE(val) < SVt_PVAV)) {
ARError_add(AR_RETURN_ERROR, AP_ERR_BYTE_LIST);
return -1;
}
out->u.byteListVal = MALLOCNN(sizeof(ARByteList));
out->u.byteListVal->type = SvIV(type);
bytelist = SvPV(val, len);
out->u.byteListVal->numItems = len;
out->u.byteListVal->bytes = MALLOCNN(len);
memcpy(out->u.byteListVal->bytes, bytelist, len);
break;
}
}
ARError_add(AR_RETURN_ERROR, AP_ERR_BYTE_LIST);
return -1;
case AR_DATA_TYPE_ULONG:
out->u.ulongVal = SvIV(in); /* FIX -- does perl have
* ulong ? */
break;
#if AR_EXPORT_VERSION >= 4
case AR_DATA_TYPE_DECIMAL:
out->u.decimalVal = strdup(SvPV(in, PL_na));
break;
case AR_DATA_TYPE_ATTACH:
/* value must be a hash reference */
if (SvROK(in)) {
if (SvTYPE(hash = (HV *) SvRV(in)) == SVt_PVHV) {
ARAttachStruct *attachp = MALLOCNN(sizeof(ARAttachStruct));
ARLocStruct *locp = &(attachp->loc);
long size = 0;
SV *name = NULL;
/*
* the hash should contain keys:
* file (a filename) or
* buffer (a buffer)
* and all of:
* size (length of file or buffer)
* name (the name to give the attachment)
* name defaults to the filename or "Anonymous Incore Buffer"
*/
/* first: decode the size key */
fetch = hv_fetch(hash, "size", strlen("size") , FALSE);
if (!fetch) {
AP_FREE(attachp);
ARError_add(AR_RETURN_ERROR, AP_ERR_ATTACH,
"Must specify 'size' key.");
return -1;
}
if (!(SvOK(*fetch) && SvTYPE(*fetch) < SVt_PVAV)) {
AP_FREE(attachp);
ARError_add(AR_RETURN_ERROR, AP_ERR_ATTACH,
"'size' key does not map to scalar value.");
return -1;
}
size = SvIV(*fetch);
/* now get the name, if any */
fetch = hv_fetch(hash, "name", strlen("name") , FALSE);
if( !fetch)
name = NULL;
else
name = *fetch;
/*
* next: determine if we are dealing
* with an in core buffer or a
* filename and setup the
* AttachStruct.name field
* accordingly
*/
fetch = hv_fetch(hash, "file", strlen("file") , FALSE);
fetch2 = hv_fetch(hash, "buffer", strlen("buffer") , FALSE);
/*
* either/or must be specifed: not
* both and not neither
*/
if ((!fetch && !fetch2) || (fetch && fetch2)) {
AP_FREE(attachp);
ARError_add(AR_RETURN_ERROR, AP_ERR_ATTACH,
"Must specify one either 'file' or 'buffer' key.");
return -1;
}
/* we've been given a filename */
if (fetch) {
char *filename;
STRLEN filenamelen;
if (!(SvOK(*fetch) && SvTYPE(*fetch) < SVt_PVAV)) {
AP_FREE(attachp);
ARError_add(AR_RETURN_ERROR, AP_ERR_ATTACH,
"'file' key does not map to scalar value.");
return -1;
}
locp->locType = AR_LOC_FILENAME;
filename = SvPV(*fetch, filenamelen);
/* if we have an explicitly set name, use it, else use the filename */
if (name) {
STRLEN __len; /* because some perls have "na" and others "PL_na" */
attachp->name = strdup(SvPV(name, __len));
} else {
attachp->name = MALLOCNN(filenamelen + 1);
memcpy(attachp->name, filename, filenamelen);
}
locp->u.filename = MALLOCNN(filenamelen + 1);
memcpy(locp->u.filename, filename, filenamelen);
attachp->origSize = size;
}
/* else we've been given a buffer */
else {
STRLEN __len; /* dummy variable */
if (!(SvOK(*fetch2) && SvTYPE(*fetch2) < SVt_PVAV)) {
AP_FREE(attachp);
ARError_add(AR_RETURN_ERROR, AP_ERR_ATTACH,
"'buffer' key does not map to scalar value.");
return -1;
}
if (name)
attachp->name = strdup(SvPV(name, __len));
else
attachp->name = strdup("Anonymous In-core Buffer");
locp->locType = AR_LOC_BUFFER;
locp->u.buf.bufSize = size;
locp->u.buf.buffer = MALLOCNN(size);
memcpy(locp->u.buf.buffer, SvPV(*fetch2, __len), size);
}
out->u.attachVal = attachp;
break;
}
}
ARError_add(AR_RETURN_ERROR, AP_ERR_ATTACH,
"Non hash-reference passed as attachment value.");
return -1;
break;
#endif
case AR_DATA_TYPE_COORDS:
if (SvTYPE(array = (AV *) SvRV(in)) == SVt_PVAV) {
len = av_len(array) + 1;
out->u.coordListVal = MALLOCNN(sizeof(ARCoordList));
out->u.coordListVal->numItems = len;
out->u.coordListVal->coords = MALLOCNN(sizeof(ARCoordStruct) * len);
for (i = 0; i < len; i++) {
fetch = av_fetch(array, i, 0);
if (fetch && SvTYPE(array2 = (AV *) SvRV(*fetch)) == SVt_PVAV &&
av_len(array2) == 1) {
fetch2 = av_fetch(array2, 0, 0);
if (!*fetch2)
goto fetch_puke;
out->u.coordListVal->coords[i].x = SvIV(*fetch);
fetch2 = av_fetch(array2, 1, 0);
if (!*fetch2)
goto fetch_puke;
out->u.coordListVal->coords[i].y = SvIV(*fetch);
} else {
fetch_puke: ;
AP_FREE(out->u.coordListVal->coords);
AP_FREE(out->u.coordListVal);
ARError_add(AR_RETURN_ERROR, AP_ERR_COORD_STRUCT);
return -1;
}
}
return 0;
}
ARError_add(AR_RETURN_ERROR, AP_ERR_COORD_LIST);
return -1;
#endif
default:
ARError_add(AR_RETURN_ERROR, AP_ERR_FIELD_TYPE);
return -1;
}
}
return 0;
}
#if AR_EXPORT_VERSION >= 7L
int
sv_to_ARCurrencyStruct(ARControlStruct *ctrl, SV *in, ARCurrencyStruct *out)
{
SV **fetch, *val, *type, *val2, *fl;
AV *afl;
HV *hash;
unsigned int i;
if (SvROK(in)) {
if (SvTYPE (hash = (HV *)SvRV(in)) == SVt_PVHV) {
fetch = hv_fetch(hash, "value", strlen("value"), FALSE);
if (!fetch) {
( run in 0.494 second using v1.01-cache-2.11-cpan-39bf76dae61 )