* Europagate, 1995
*
* $Log: cclfind.c,v $
- * Revision 1.13 1999-12-22 13:13:32 adam
+ * Revision 1.16 2000-03-14 09:06:11 adam
+ * Added POSIX threads support for frontend server.
+ *
+ * Revision 1.15 2000/02/24 23:49:13 adam
+ * Fixed memory allocation problem.
+ *
+ * Revision 1.14 2000/01/31 13:15:21 adam
+ * Removed uses of assert(3). Cleanup of ODR. CCL parser update so
+ * that some characters are not surrounded by spaces in resulting term.
+ * ILL-code updates.
+ *
+ * Revision 1.13 1999/12/22 13:13:32 adam
* Search terms may include "operators" without causing error.
*
* Revision 1.12 1999/11/30 13:47:11 adam
*
*/
-#include <stdio.h>
#include <stdlib.h>
-#include <assert.h>
#include <string.h>
#include <yaz/ccl.h>
static char *copy_token_name (struct ccl_token *tp)
{
char *str = (char *)malloc (tp->len + 1);
- assert (str);
+ ccl_assert (str);
memcpy (str, tp->name, tp->len);
str[tp->len] = '\0';
return str;
{
struct ccl_rpn_node *p;
p = (struct ccl_rpn_node *)malloc (sizeof(*p));
- assert (p);
+ ccl_assert (p);
p->kind = kind;
return p;
}
struct ccl_rpn_attr *n;
n = (struct ccl_rpn_attr *)malloc (sizeof(*n));
- assert (n);
+ ccl_assert (n);
n->type = type;
n->value = value;
n->next = p->u.t.attr_list;
struct ccl_rpn_attr **qa,
int *term_list)
{
+ struct ccl_rpn_attr *qa_tmp[2];
struct ccl_rpn_node *p;
struct ccl_token *lookahead = cclp->look_token;
int len = 0;
{
/* no qualifier(s) applied. Use 'term' if it is defined */
- qa = (struct ccl_rpn_attr **)malloc (2*sizeof(*qa));
- assert (qa);
+ qa = qa_tmp;
+ ccl_assert (qa);
qa[0] = ccl_qual_search (cclp, "term", 4);
qa[1] = NULL;
}
/* make the RPN token */
p->u.t.term = (char *)malloc (len);
- assert (p->u.t.term);
+ ccl_assert (p->u.t.term);
p->u.t.term[0] = '\0';
for (i = 0; i<no; i++)
{
}
else if (i == no-1 && right_trunc)
src_len--;
- if (i)
- strcat (p->u.t.term, " ");
+ if (src_len)
+ {
+ int len = strlen(p->u.t.term);
+ if (len &&
+ !strchr("-+", *src_str) &&
+ !strchr("-+", p->u.t.term[len-1]))
+ {
+ strcat (p->u.t.term, " ");
+ }
+ }
strxcat (p->u.t.term, src_str, src_len);
ADVANCE;
}
if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_BOTH))
{
cclp->error_code = CCL_ERR_TRUNC_NOT_BOTH;
- free (qa);
ccl_rpn_delete (p);
return NULL;
}
if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_RIGHT))
{
cclp->error_code = CCL_ERR_TRUNC_NOT_RIGHT;
- free (qa);
ccl_rpn_delete (p);
return NULL;
}
if (!qual_val_type (qa, CCL_BIB1_TRU, CCL_BIB1_TRU_CAN_LEFT))
{
cclp->error_code = CCL_ERR_TRUNC_NOT_LEFT;
- free (qa);
ccl_rpn_delete (p);
return NULL;
}
for (i=0; qa[i]; i++)
no++;
ap = (struct ccl_rpn_attr **)malloc ((no+1) * sizeof(*ap));
- assert (ap);
+ ccl_assert (ap);
for (i = 0; cclp->look_token != la; i++)
{
ap[i] = ccl_qual_search (cclp, cclp->look_token->name,