X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=bfile%2Fmfile.c;h=d00e78e148e7a34211d3f3e042f5749b6d2b9a94;hb=52abadd829e92fed45e603cbf47e22447d19d5eb;hp=0d37fdec2efe85aad2805bfe0b420cd7bd4d72bb;hpb=289af445bf7c8042b46200f9f2af18049ae049fb;p=idzebra-moved-to-github.git diff --git a/bfile/mfile.c b/bfile/mfile.c index 0d37fde..d00e78e 100644 --- a/bfile/mfile.c +++ b/bfile/mfile.c @@ -4,7 +4,17 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: mfile.c,v $ - * Revision 1.40 2000-10-17 12:37:09 adam + * Revision 1.43 2002-04-04 20:50:36 adam + * Multi register works with record paths and data1 profile path + * + * Revision 1.42 2002/04/04 14:14:13 adam + * Multiple registers (alpha early) + * + * Revision 1.41 2000/11/29 14:24:01 adam + * Script configure uses yaz pthreads options. Added locking for + * zebra_register_{lock,unlock}. + * + * Revision 1.40 2000/10/17 12:37:09 adam * Fixed notification of live-updates. Fixed minor problem with mf_init * where it didn't handle shadow area file names correctly. * @@ -155,7 +165,7 @@ #include #include -static int scan_areadef(MFile_area ma, const char *name, const char *ad) +static int scan_areadef(MFile_area ma, const char *ad, const char *base) { /* * If no definition is given, use current directory, unlimited. @@ -164,7 +174,7 @@ static int scan_areadef(MFile_area ma, const char *name, const char *ad) mf_dir **dp = &ma->dirs, *dir = *dp; if (!ad) - ad = ".:-1b"; + ad = ".:-1b"; for (;;) { const char *ad0 = ad; @@ -175,6 +185,12 @@ static int scan_areadef(MFile_area ma, const char *name, const char *ad) ad++; if (!*ad) break; + if (!yaz_is_abspath(ad) && base) + { + strcpy (dirname, base); + i = strlen(dirname); + dirname[i++] = '/'; + } while (*ad) { if (*ad == ':' && strchr ("+-0123456789", ad[1])) @@ -279,7 +295,7 @@ static int cmp_part_file(const void *p1, const void *p2) * Create a new area, cotaining metafiles in directories. * Find the part-files in each directory, and inventory the existing metafiles. */ -MFile_area mf_init(const char *name, const char *spec) +MFile_area mf_init(const char *name, const char *spec, const char *base) { MFile_area ma = (MFile_area) xmalloc(sizeof(*ma)); mf_dir *dirp; @@ -294,7 +310,7 @@ MFile_area mf_init(const char *name, const char *spec) strcpy(ma->name, name); ma->mfiles = 0; ma->dirs = 0; - if (scan_areadef(ma, name, spec) < 0) + if (scan_areadef(ma, spec, base) < 0) { logf (LOG_WARN, "Failed to access description of '%s'", name); return 0; @@ -316,10 +332,7 @@ MFile_area mf_init(const char *name, const char *spec) if (strchr (".-", *dent->d_name)) continue; if (len < 5 || !cp || strcmp (dent->d_name + len - 3, ".mf")) - { - logf (LOG_WARN, "bf: %s is not a part-file.", dent->d_name); continue; - } number = atoi(cp+1); memcpy (metaname, dent->d_name, cp - dent->d_name); metaname[ cp - dent->d_name] = '\0';