X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=index%2Fextract.c;h=fbd37acd3d4d0677cada9808fcca0cfc5320d37e;hb=1ef7d46cdc719bc71b84ea81a1e7b467f9669fba;hp=fc2205f9440093208ae249b2be2877cffc2d14d0;hpb=34552d7bc714468512b1873f1d6b75608d6b4655;p=idzebra-moved-to-github.git diff --git a/index/extract.c b/index/extract.c index fc2205f..fbd37ac 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.198 2005-11-09 11:51:29 adam Exp $ +/* $Id: extract.c,v 1.201 2006-02-08 13:45:44 adam Exp $ 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) @@ -216,8 +218,8 @@ static char *fileMatchStr (ZebraHandle zh, while (1) { - while (*s == ' ' || *s == '\t') - s++; + for (; *s && strchr(FILE_MATCH_BLANK, *s); 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 matchFlag[32]; 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'; - + + for (; strchr(FILE_MATCH_BLANK, *s); 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'; } @@ -257,12 +264,7 @@ static char *fileMatchStr (ZebraHandle zh, } 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"); @@ -271,7 +273,7 @@ static char *fileMatchStr (ZebraHandle zh, s++; for (i = 0; i<32; i++) - if (matchFlag[i] && ws[i]) + if (ws[i]) { if (first) { @@ -294,12 +296,12 @@ static char *fileMatchStr (ZebraHandle zh, 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; - 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; @@ -329,7 +331,7 @@ static char *fileMatchStr (ZebraHandle zh, while (*s && *s != stopMarker) { - if (i < 63) + if (i+1 < sizeof(tmpString)) tmpString[i++] = *s++; } if (*s) @@ -586,7 +588,7 @@ static int file_extract_record(ZebraHandle zh, { yaz_log (YLOG_LOG, "delete %s %s " PRINTF_OFF_T, zh->m_record_type, fname, recordOffset); - yaz_log (YLOG_WARN, "cannot delete file above, storeKeys false"); + yaz_log (YLOG_WARN, "cannot delete file above, storeKeys false (1)"); } else { @@ -604,29 +606,19 @@ static int file_extract_record(ZebraHandle zh, } else { - /* record going to be updated */ - if (zebra_rec_keys_empty(delkeys)) - { + /* flush new keys for sort&search etc */ + if (zh->records_processed < zh->m_file_verbose_limit) yaz_log (YLOG_LOG, "update %s %s " PRINTF_OFF_T, zh->m_record_type, fname, recordOffset); - yaz_log (YLOG_WARN, "cannot update file above, storeKeys false"); - } - else - { - /* flush new keys for sort&search etc */ - if (zh->records_processed < zh->m_file_verbose_limit) - yaz_log (YLOG_LOG, "update %s %s " PRINTF_OFF_T, - zh->m_record_type, fname, recordOffset); - recordAttr->staticrank = extractCtrl.staticrank; + recordAttr->staticrank = extractCtrl.staticrank; #if NATTR - extract_flushSortKeys (zh, *sysno, 1, zh->reg->sortKeys); + extract_flushSortKeys (zh, *sysno, 1, zh->reg->sortKeys); #else - extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); + extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); #endif - extract_flushRecordKeys (zh, *sysno, 1, zh->reg->keys, + extract_flushRecordKeys (zh, *sysno, 1, zh->reg->keys, recordAttr->staticrank); - zh->records_updated++; - } + zh->records_updated++; } zebra_rec_keys_close(delkeys); #if NATTR @@ -855,6 +847,7 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, int force_update, int allow_update) { + SYSNO sysno0 = 0; RecordAttr *recordAttr; struct recExtractCtrl extractCtrl; int r; @@ -952,14 +945,14 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, yaz_log (YLOG_WARN, "extract error: no such filter"); return ZEBRA_FAIL; } - /* match criteria */ - matchStr = NULL; if (extractCtrl.match_criteria[0]) match_criteria = extractCtrl.match_criteria; - if (! *sysno) { - char *rinfo; + if (!sysno) { + + sysno = &sysno0; + if (match_criteria && *match_criteria) { matchStr = match_criteria; } else { @@ -974,7 +967,7 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, } } if (matchStr) { - rinfo = dict_lookup (zh->reg->matchDict, matchStr); + char *rinfo = dict_lookup (zh->reg->matchDict, matchStr); if (rinfo) { assert(*rinfo == sizeof(*sysno)); @@ -995,8 +988,7 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, /* new record */ if (delete_flag) { - if (show_progress) - yaz_log (YLOG_LOG, "delete %s %s %ld", recordType, + yaz_log (YLOG_LOG, "delete %s %s %ld", recordType, pr_fname, (long) recordOffset); yaz_log (YLOG_WARN, "cannot delete record above (seems new)"); return ZEBRA_FAIL; @@ -1041,8 +1033,7 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, if (!allow_update) { - if (show_progress) - yaz_log (YLOG_LOG, "skipped %s %s %ld", + yaz_log (YLOG_LOG, "skipped %s %s %ld", recordType, pr_fname, (long) recordOffset); logRecord(zh); return ZEBRA_FAIL; @@ -1079,13 +1070,10 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, /* record going to be deleted */ if (zebra_rec_keys_empty(delkeys)) { - if (show_progress) - { - yaz_log (YLOG_LOG, "delete %s %s %ld", recordType, - pr_fname, (long) recordOffset); - yaz_log (YLOG_WARN, "cannot delete file above, " - "storeKeys false"); - } + yaz_log (YLOG_LOG, "delete %s %s %ld", recordType, + pr_fname, (long) recordOffset); + yaz_log (YLOG_WARN, "cannot delete file above, " + "storeKeys false (3)"); } else { @@ -1103,31 +1091,18 @@ ZEBRA_RES buffer_extract_record(ZebraHandle zh, } else { - /* record going to be updated */ - if (zebra_rec_keys_empty(delkeys)) - { - if (show_progress) - { - yaz_log (YLOG_LOG, "update %s %s %ld", recordType, - pr_fname, (long) recordOffset); - yaz_log (YLOG_WARN, "cannot update file above, storeKeys false"); - } - } - else - { - if (show_progress) + if (show_progress) yaz_log (YLOG_LOG, "update %s %s %ld", recordType, pr_fname, (long) recordOffset); - recordAttr->staticrank = extractCtrl.staticrank; + recordAttr->staticrank = extractCtrl.staticrank; #if NATTR - extract_flushSortKeys (zh, *sysno, 1, zh->reg->sortKeys); + extract_flushSortKeys (zh, *sysno, 1, zh->reg->sortKeys); #else - extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); + extract_flushSortKeys (zh, *sysno, 1, &zh->reg->sortKeys); #endif - extract_flushRecordKeys (zh, *sysno, 1, zh->reg->keys, + extract_flushRecordKeys (zh, *sysno, 1, zh->reg->keys, recordAttr->staticrank); - zh->records_updated++; - } + zh->records_updated++; } zebra_rec_keys_close(delkeys); #if NATTR