-/* $Id: zrpn.c,v 1.178 2005-04-25 21:40:34 adam Exp $
+/* $Id: zrpn.c,v 1.182 2005-04-29 10:54:45 adam Exp $
Copyright (C) 1995-2005
Index Data ApS
#endif
#include <ctype.h>
+#include <yaz/diagbib1.h>
#include "index.h"
#include <zebra_xpath.h>
if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
{
- zh->errCode = 109; /* Database unavailable */
+ zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE;
zh->errString = basenames[base_no];
return ZEBRA_FAIL;
}
if (r == -1)
{
/* set was found, but value wasn't defined */
- errCode = 114;
+ errCode = YAZ_BIB1_UNSUPP_USE_ATTRIBUTE;
if (use_string)
errString = nmem_strdup(stream, use_string);
else
oident.value = curAttributeSet;
oid_ent_to_oid (&oident, oid);
- errCode = 121;
+ errCode = YAZ_BIB1_UNSUPP_ATTRIBUTE_SET;
errString = nmem_strdup(stream, oident.desc);
}
continue;
strcat(term_dict, ")");
break;
default:
- zh->errCode = 120;
+ zh->errCode = YAZ_BIB1_UNSUPP_TRUNCATION_ATTRIBUTE;
zh->errString = nmem_strdup_i(stream, truncation_value);
return ZEBRA_FAIL;
}
if (ret == (size_t)(-1))
{
ret = yaz_iconv(zh->iconv_to_utf8, 0, 0, 0, 0);
- zh->errCode = 125;
+ zh->errCode =
+ YAZ_BIB1_QUERY_TERM_INCLUDES_CHARS_THAT_DO_NOT_TRANSLATE_INTO_;
return -1;
}
*outbuf = 0;
termz[sizez] = '\0';
break;
default:
- zh->errCode = 124;
+ zh->errCode = YAZ_BIB1_UNSUPP_CODED_VALUE_FOR_TERM;
return ZEBRA_FAIL;
}
return ZEBRA_OK;
grep_info->termset = resultSetAdd(zh, termset_name, 1);
if (!grep_info->termset)
{
- zh->errCode = 128;
+ zh->errCode = YAZ_BIB1_ILLEGAL_RESULT_SET_NAME;
zh->errString = nmem_strdup(stream, termset_name);
return -1;
}
curAttributeSet, use_value, r);
if (r == -1)
{
- errCode = 114;
+ errCode = YAZ_BIB1_UNSUPP_USE_ATTRIBUTE;
if (use_string)
errString = nmem_strdup(stream, use_string);
else
errString = nmem_strdup_i (stream, use_value);
}
else
- errCode = 121;
+ errCode = YAZ_BIB1_UNSUPP_ATTRIBUTE_SET;
continue;
}
}
if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
{
- zh->errCode = 109; /* Database unavailable */
+ zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE;
zh->errString = basenames[base_no];
return -1;
}
}
if (!prefix_len)
{
- errCode = 114;
+ errCode = YAZ_BIB1_UNSUPP_USE_ATTRIBUTE;
errString = nmem_strdup_i(stream, use_value);
continue;
}
if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
{
- zh->errCode = 109; /* Database unavailable */
+ zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE;
zh->errString = basenames[base_no];
return rset;
}
}
else
{
- zh->errCode = 118;
+ zh->errCode = YAZ_BIB1_UNSUPP_STRUCTURE_ATTRIBUTE;
return ZEBRA_FAIL;
}
if (res != ZEBRA_OK)
case Z_Operator_prox:
if (zop->u.prox->which != Z_ProximityOperator_known)
{
- zh->errCode = 132;
+ zh->errCode = YAZ_BIB1_UNSUPP_PROX_UNIT_CODE;
return ZEBRA_FAIL;
}
if (*zop->u.prox->u.known != Z_ProxUnit_word)
{
char *val = (char *) nmem_malloc(stream, 16);
- zh->errCode = 132;
+ zh->errCode = YAZ_BIB1_UNSUPP_PROX_UNIT_CODE;
zh->errString = val;
sprintf(val, "%d", *zop->u.prox->u.known);
return ZEBRA_FAIL;
}
break;
default:
- zh->errCode = 110;
+ zh->errCode = YAZ_BIB1_OPERATOR_UNSUPP;
return ZEBRA_FAIL;
}
*num_result_sets = 1;
rset = resultSetRef(zh, zs->u.simple->u.resultSetId);
if (!rset)
{
- zh->errCode = 30;
+ zh->errCode = YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST;
zh->errString =
nmem_strdup(stream, zs->u.simple->u.resultSetId);
return ZEBRA_FAIL;
}
else
{
- zh->errCode = 3;
+ zh->errCode = YAZ_BIB1_UNSUPP_SEARCH;
return ZEBRA_FAIL;
}
*num_result_sets = 1;
}
else
{
- zh->errCode = 3;
+ zh->errCode = YAZ_BIB1_UNSUPP_SEARCH;
return ZEBRA_FAIL;
}
return ZEBRA_OK;
len_prefix = strlen(scan_info->prefix);
if (memcmp (name, scan_info->prefix, len_prefix))
return 1;
- if (pos > 0) idx = scan_info->after - pos + scan_info->before;
+ if (pos > 0)
+ idx = scan_info->after - pos + scan_info->before;
else
idx = - pos - 1;
+ if (idx < 0)
+ return 0;
scan_info->list[idx].term = (char *)
odr_malloc(scan_info->odr, strlen(name + len_prefix)+1);
strcpy(scan_info->list[idx].term, name + len_prefix);
rank_type, &complete_flag, &sort_flag))
{
*num_entries = 0;
- zh->errCode = 113;
+ zh->errCode = YAZ_BIB1_UNSUPP_ATTRIBUTE_TYPE;
return ZEBRA_FAIL;
}
yaz_log(YLOG_DEBUG, "use_value = %d", use_value);
if (zebraExplain_curDatabase (zh->reg->zei, basenames[base_no]))
{
zh->errString = basenames[base_no];
- zh->errCode = 109; /* Database unavailable */
+ zh->errCode = YAZ_BIB1_DATABASE_UNAVAILABLE;
*num_entries = 0;
return ZEBRA_FAIL;
}
attributeset, use_value);
if (r == -1)
{
- errCode = 114;
+ errCode = YAZ_BIB1_UNSUPP_USE_ATTRIBUTE;
if (use_string)
errString = odr_strdup(stream, use_string);
else
}
}
else
- errCode = 121;
+ errCode = YAZ_BIB1_UNSUPP_ATTRIBUTE_SET;
continue;
}
}
return ZEBRA_OK;
}
/* prepare dictionary scanning */
+ if (pos < 1 || pos > num)
+ {
+ zh->errCode = YAZ_BIB1_SCAN_UNSUPP_VALUE_OF_POSITION_IN_RESPONSE;
+ *num_entries = 0;
+ return ZEBRA_FAIL;
+ }
+ if (num < 1)
+ {
+ *num_entries = 0;
+ return ZEBRA_OK;
+ }
before = pos-1;
after = 1+num-pos;
+ yaz_log(YLOG_DEBUG, "rpn_scan pos=%d num=%d before=%d "
+ "after=%d before+after=%d",
+ pos, num, before, after, before+after);
scan_info_array = (struct scan_info *)
odr_malloc(stream, ord_no * sizeof(*scan_info_array));
for (i = 0; i < ord_no; i++)
for (j = 0; j < ord_no; j++)
{
- if (ptr[j] < before+after &&
+ if (ptr[j] < before+after && ptr[j] >= 0 &&
(tst = scan_info_array[j].list[ptr[j]].term) &&
(!mterm || strcmp (tst, mterm) < 0))
{
ptr[j0]++;
for (j = j0+1; j<ord_no; j++)
{
- if (ptr[j] < before+after &&
+ if (ptr[j] < before+after && ptr[j] >= 0 &&
(tst = scan_info_array[j].list[ptr[j]].term) &&
!strcmp (tst, mterm))
{
*num_entries -= (after-i);
*is_partial = 1;
}
-
/* consider terms before main term */
for (i = 0; i<ord_no; i++)
ptr[i] = 0;
for (j = 0; j <ord_no; j++)
{
- if (ptr[j] < before &&
+ if (ptr[j] < before && ptr[j] >= 0 &&
(tst = scan_info_array[j].list[before-1-ptr[j]].term) &&
(!mterm || strcmp (tst, mterm) > 0))
{
for (j = j0+1; j<ord_no; j++)
{
- if (ptr[j] < before &&
+ if (ptr[j] < before && ptr[j] >= 0 &&
(tst = scan_info_array[j].list[before-1-ptr[j]].term) &&
!strcmp (tst, mterm))
{