X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=bfile%2Fmfile.c;h=2295d111f1ded310d8a7072515a93c7226c4478b;hb=0f563f23506dabd7c84bdb750d4539b2b6cacf02;hp=b55dc2e5fdc0b0cd023df3004ed4f8000b42d71b;hpb=0f78f3fe78e859d9f0d3f0d3e13fcd28085dd427;p=idzebra-moved-to-github.git diff --git a/bfile/mfile.c b/bfile/mfile.c index b55dc2e..2295d11 100644 --- a/bfile/mfile.c +++ b/bfile/mfile.c @@ -1,5 +1,5 @@ -/* $Id: mfile.c,v 1.71 2006-11-14 08:12:06 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: mfile.c,v 1.74 2007-01-15 15:10:14 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -192,7 +192,8 @@ static int cmp_part_file(const void *p1, const void *p2) return 0; } -MFile_area mf_init(const char *name, const char *spec, const char *base) +MFile_area mf_init(const char *name, const char *spec, const char *base, + int only_shadow_files) { MFile_area ma = (MFile_area) xmalloc(sizeof(*ma)); mf_dir *dirp; @@ -236,6 +237,11 @@ MFile_area mf_init(const char *name, const char *spec, const char *base) memcpy(metaname, dent->d_name, cp - dent->d_name); metaname[ cp - dent->d_name] = '\0'; + /* only files such as file-i-0.mf and file-i-b-0.mf, bug #739 */ + if (only_shadow_files && cp[-2] != '-') + continue; + if (!only_shadow_files && cp[-2] == '-') + continue; for (meta_f = ma->mfiles; meta_f; meta_f = meta_f->next) { /* known metafile */ @@ -282,9 +288,6 @@ MFile_area mf_init(const char *name, const char *spec, const char *base) mf_destroy(ma); return 0; } -#ifndef WIN32 - fsync(fd); -#endif close(fd); if (dirp->max_bytes >= 0) dirp->avail_bytes -= part_f->bytes; @@ -433,7 +436,8 @@ int mf_close(MFile mf) if (mf->files[i].fd >= 0) { #ifndef WIN32 - fsync(mf->files[i].fd); + if (mf->wr) + fsync(mf->files[i].fd); #endif close(mf->files[i].fd); mf->files[i].fd = -1;