projects
/
idzebra-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed bug #462: recordId: (set,use) is picky
[idzebra-moved-to-github.git]
/
index
/
extract.c
diff --git
a/index/extract.c
b/index/extract.c
index
f92ca7f
..
fbd37ac
100644
(file)
--- a/
index/extract.c
+++ b/
index/extract.c
@@
-1,4
+1,4
@@
-/* $Id: extract.c,v 1.200 2005-12-09 10:45:04 adam Exp $
+/* $Id: extract.c,v 1.201 2006-02-08 13:45:44 adam Exp $
Copyright (C) 1995-2005
Index Data ApS
Copyright (C) 1995-2005
Index Data ApS
@@
-206,6
+206,8
@@
static void file_end (void *handle, off_t offset)
}
}
}
}
+#define FILE_MATCH_BLANK "\t "
+
static char *fileMatchStr (ZebraHandle zh,
zebra_rec_keys_t reckeys,
const char *fname, const char *spec)
static char *fileMatchStr (ZebraHandle zh,
zebra_rec_keys_t reckeys,
const char *fname, const char *spec)
@@
-216,8
+218,8
@@
static char *fileMatchStr (ZebraHandle zh,
while (1)
{
while (1)
{
- while (*s == ' ' || *s == '\t')
- s++;
+ for (; *s && strchr(FILE_MATCH_BLANK, *s); s++)
+ ;
if (!*s)
break;
if (*s == '(')
if (!*s)
break;
if (*s == '(')
@@
-226,21
+228,26
@@
static char *fileMatchStr (ZebraHandle zh,
char attset_str[64], attname_str[64];
data1_attset *attset;
int i;
char attset_str[64], attname_str[64];
data1_attset *attset;
int i;
- char matchFlag[32];
int attSet = 1, attUse = 1;
int first = 1;
int attSet = 1, attUse = 1;
int first = 1;
-
- s++;
- for (i = 0; *s && *s != ',' && *s != ')'; s++)
- if (i < 63)
+
+ for (s++; strchr(FILE_MATCH_BLANK, *s); s++)
+ ;
+ for (i = 0; *s && *s != ',' && *s != ')' &&
+ !strchr(FILE_MATCH_BLANK, *s); s++)
+ if (i+1 < sizeof(attset_str))
attset_str[i++] = *s;
attset_str[i] = '\0';
attset_str[i++] = *s;
attset_str[i] = '\0';
-
+
+ for (; strchr(FILE_MATCH_BLANK, *s); s++)
+ ;
if (*s == ',')
{
if (*s == ',')
{
- s++;
- for (i = 0; *s && *s != ')'; s++)
- if (i < 63)
+ for (s++; strchr(FILE_MATCH_BLANK, *s); s++)
+ ;
+ for (i = 0; *s && *s != ')' &&
+ !strchr(FILE_MATCH_BLANK, *s); s++)
+ if (i+1 < sizeof(attname_str))
attname_str[i++] = *s;
attname_str[i] = '\0';
}
attname_str[i++] = *s;
attname_str[i] = '\0';
}
@@
-257,12
+264,7
@@
static char *fileMatchStr (ZebraHandle zh,
}
searchRecordKey (zh, reckeys, attSet, attUse, ws, 32);
}
searchRecordKey (zh, reckeys, attSet, attUse, ws, 32);
- if (*s == ')')
- {
- for (i = 0; i<32; i++)
- matchFlag[i] = 1;
- }
- else
+ if (*s != ')')
{
yaz_log (YLOG_WARN, "Missing ) in match criteria %s in group %s",
spec, zh->m_group ? zh->m_group : "none");
{
yaz_log (YLOG_WARN, "Missing ) in match criteria %s in group %s",
spec, zh->m_group ? zh->m_group : "none");
@@
-271,7
+273,7
@@
static char *fileMatchStr (ZebraHandle zh,
s++;
for (i = 0; i<32; i++)
s++;
for (i = 0; i<32; i++)
- if (matchFlag[i] && ws[i])
+ if (ws[i])
{
if (first)
{
{
if (first)
{
@@
-294,12
+296,12
@@
static char *fileMatchStr (ZebraHandle zh,
char special[64];
const char *spec_src = NULL;
const char *s1 = ++s;
char special[64];
const char *spec_src = NULL;
const char *s1 = ++s;
- while (*s1 && *s1 != ' ' && *s1 != '\t')
+ while (*s1 && !strchr(FILE_MATCH_BLANK, *s1))
s1++;
spec_len = s1 - s;
s1++;
spec_len = s1 - s;
- if (spec_len > 63)
- spec_len = 63;
+ if (spec_len > sizeof(special)-1)
+ spec_len = sizeof(special)-1;
memcpy (special, s, spec_len);
special[spec_len] = '\0';
s = s1;
memcpy (special, s, spec_len);
special[spec_len] = '\0';
s = s1;
@@
-329,7
+331,7
@@
static char *fileMatchStr (ZebraHandle zh,
while (*s && *s != stopMarker)
{
while (*s && *s != stopMarker)
{
- if (i < 63)
+ if (i+1 < sizeof(tmpString))
tmpString[i++] = *s++;
}
if (*s)
tmpString[i++] = *s++;
}
if (*s)