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
Properly escape \ in non-regexp searches
[idzebra-moved-to-github.git]
/
bfile
/
bfile.c
diff --git
a/bfile/bfile.c
b/bfile/bfile.c
index
7fb6a8c
..
44f4d1e
100644
(file)
--- a/
bfile/bfile.c
+++ b/
bfile/bfile.c
@@
-1,8
+1,5
@@
-/* $Id: bfile.c,v 1.51 2006-11-08 22:08:27 adam Exp $
- Copyright (C) 1995-2006
- Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+ Copyright (C) 1994-2011 Index Data
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@
-20,6
+17,9
@@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@
-55,7
+55,7
@@
struct BFile_struct
struct BFiles_struct {
MFile_area commit_area;
struct BFiles_struct {
MFile_area commit_area;
- MFile_area_struct *register_area;
+ MFile_area register_area;
char *base;
char *cache_fname;
};
char *base;
char *cache_fname;
};
@@
-68,7
+68,7
@@
BFiles bfs_create (const char *spec, const char *base)
bfs->cache_fname = 0;
if (base)
bfs->base = xstrdup(base);
bfs->cache_fname = 0;
if (base)
bfs->base = xstrdup(base);
- bfs->register_area = mf_init("register", spec, base);
+ bfs->register_area = mf_init("register", spec, base, 0);
if (!bfs->register_area)
{
bfs_destroy(bfs);
if (!bfs->register_area)
{
bfs_destroy(bfs);
@@
-98,7
+98,8
@@
static FILE *open_cache(BFiles bfs, const char *flags)
static void unlink_cache(BFiles bfs)
{
static void unlink_cache(BFiles bfs)
{
- unlink(bfs->cache_fname);
+ if (bfs->cache_fname)
+ unlink(bfs->cache_fname);
}
ZEBRA_RES bf_cache(BFiles bfs, const char *spec)
}
ZEBRA_RES bf_cache(BFiles bfs, const char *spec)
@@
-107,7
+108,7
@@
ZEBRA_RES bf_cache(BFiles bfs, const char *spec)
{
yaz_log(YLOG_LOG, "enabling shadow spec=%s", spec);
if (!bfs->commit_area)
{
yaz_log(YLOG_LOG, "enabling shadow spec=%s", spec);
if (!bfs->commit_area)
- bfs->commit_area = mf_init("shadow", spec, bfs->base);
+ bfs->commit_area = mf_init("shadow", spec, bfs->base, 1);
if (bfs->commit_area)
{
bfs->cache_fname = xmalloc(strlen(bfs->commit_area->dirs->name)+
if (bfs->commit_area)
{
bfs->cache_fname = xmalloc(strlen(bfs->commit_area->dirs->name)+
@@
-127,19
+128,35
@@
ZEBRA_RES bf_cache(BFiles bfs, const char *spec)
return ZEBRA_OK;
}
return ZEBRA_OK;
}
-int bf_close(BFile bf)
+int bf_close2(BFile bf)
{
{
+ int ret = 0;
zebra_lock_rdwr_destroy(&bf->rdwr_lock);
if (bf->cf)
zebra_lock_rdwr_destroy(&bf->rdwr_lock);
if (bf->cf)
- cf_close(bf->cf);
+ {
+ if (cf_close(bf->cf))
+ ret = -1;
+ }
if (bf->mf)
if (bf->mf)
- mf_close(bf->mf);
+ {
+ if (mf_close(bf->mf))
+ ret = -1;
+ }
xfree(bf->alloc_buf);
xfree(bf->magic);
xfree(bf);
xfree(bf->alloc_buf);
xfree(bf->magic);
xfree(bf);
- return 0;
+ return ret;
+}
+
+void bf_close(BFile bf)
+{
+ if (bf_close2(bf))
+ {
+ zebra_exit("bf_close");
+ }
}
}
+
#define HEADER_SIZE 256
BFile bf_xopen(BFiles bfs, const char *name, int block_size, int wrflag,
#define HEADER_SIZE 256
BFile bf_xopen(BFiles bfs, const char *name, int block_size, int wrflag,
@@
-160,7
+177,7
@@
BFile bf_xopen(BFiles bfs, const char *name, int block_size, int wrflag,
bf->alloc_buf_size = HEADER_SIZE;
else
bf->alloc_buf_size = bf->block_size;
bf->alloc_buf_size = HEADER_SIZE;
else
bf->alloc_buf_size = bf->block_size;
-
+
hbuf = bf->alloc_buf = xmalloc(bf->alloc_buf_size);
/* fill-in default values */
hbuf = bf->alloc_buf = xmalloc(bf->alloc_buf_size);
/* fill-in default values */
@@
-226,7
+243,7
@@
int bf_xclose(BFile bf, int version, const char *more_info)
zint pos = 0;
assert(bf->alloc_buf);
assert(bf->magic);
zint pos = 0;
assert(bf->alloc_buf);
assert(bf->magic);
- sprintf(bf->alloc_buf, "%s %d " ZINT_FORMAT " " ZINT_FORMAT " ",
+ sprintf(bf->alloc_buf, "%s %d " ZINT_FORMAT " " ZINT_FORMAT " ",
bf->magic, version, bf->last_block, bf->free_list);
if (more_info)
strcat(bf->alloc_buf, more_info);
bf->magic, version, bf->last_block, bf->free_list);
if (more_info)
strcat(bf->alloc_buf, more_info);
@@
-238,7
+255,7
@@
int bf_xclose(BFile bf, int version, const char *more_info)
break;
}
}
break;
}
}
- return bf_close(bf);
+ return bf_close2(bf);
}
BFile bf_open(BFiles bfs, const char *name, int block_size, int wflag)
}
BFile bf_open(BFiles bfs, const char *name, int block_size, int wflag)
@@
-305,7
+322,7
@@
int bf_read(BFile bf, zint no, int offset, int nbytes, void *buf)
if (ret == -1)
{
if (ret == -1)
{
- exit(1);
+ zebra_exit("bf_read");
}
return ret;
}
}
return ret;
}
@@
-320,7
+337,7
@@
int bf_read2(BFile bf, zint no, int offset, int nbytes, void *buf)
if ((ret = cf_read(bf->cf, no, offset, nbytes, buf)) == 0)
ret = mf_read(bf->mf, no, offset, nbytes, buf);
}
if ((ret = cf_read(bf->cf, no, offset, nbytes, buf)) == 0)
ret = mf_read(bf->mf, no, offset, nbytes, buf);
}
- else
+ else
ret = mf_read(bf->mf, no, offset, nbytes, buf);
zebra_lock_rdwr_runlock(&bf->rdwr_lock);
return ret;
ret = mf_read(bf->mf, no, offset, nbytes, buf);
zebra_lock_rdwr_runlock(&bf->rdwr_lock);
return ret;
@@
-332,7
+349,7
@@
int bf_write(BFile bf, zint no, int offset, int nbytes, const void *buf)
if (ret == -1)
{
if (ret == -1)
{
- exit(1);
+ zebra_exit("bf_write");
}
return ret;
}
}
return ret;
}
@@
-371,7
+388,7
@@
void bf_reset(BFiles bfs)
unlink_cache(bfs);
}
unlink_cache(bfs);
}
-void bf_commitExec(BFiles bfs)
+int bf_commitExec(BFiles bfs)
{
FILE *inf;
int block_size;
{
FILE *inf;
int block_size;
@@
-379,24
+396,40
@@
void bf_commitExec(BFiles bfs)
MFile mf;
CFile cf;
int first_time;
MFile mf;
CFile cf;
int first_time;
+ int r = 0;
assert(bfs->commit_area);
if (!(inf = open_cache(bfs, "rb")))
{
yaz_log(YLOG_LOG, "No commit file");
assert(bfs->commit_area);
if (!(inf = open_cache(bfs, "rb")))
{
yaz_log(YLOG_LOG, "No commit file");
- return ;
+ return -1;
}
while (fscanf(inf, "%s %d", path, &block_size) == 2)
{
mf = mf_open(bfs->register_area, path, block_size, 1);
}
while (fscanf(inf, "%s %d", path, &block_size) == 2)
{
mf = mf_open(bfs->register_area, path, block_size, 1);
+ if (!mf)
+ {
+ r = -1;
+ break;
+ }
cf = cf_open(mf, bfs->commit_area, path, block_size, 0, &first_time);
cf = cf_open(mf, bfs->commit_area, path, block_size, 0, &first_time);
+ if (!cf)
+ {
+ mf_close(mf);
+ r = -1;
+ break;
+ }
- cf_commit(cf);
+ r = cf_commit(cf);
cf_close(cf);
mf_close(mf);
cf_close(cf);
mf_close(mf);
+
+ if (r)
+ break;
}
fclose(inf);
}
fclose(inf);
+ return r;
}
void bf_commitClean(BFiles bfs, const char *spec)
}
void bf_commitClean(BFiles bfs, const char *spec)
@@
-432,11
+465,11
@@
int bf_alloc(BFile bf, int no, zint *blocks)
memset(buf, '\0', sizeof(buf));
blocks[i] = bf->free_list;
memset(buf, '\0', sizeof(buf));
blocks[i] = bf->free_list;
- if (!bf_read(bf, bf->free_list, 0, sizeof(buf), buf))
+ if (bf_read(bf, bf->free_list, 0, sizeof(buf), buf) != 1)
{
yaz_log(YLOG_WARN, "Bad freelist entry " ZINT_FORMAT,
bf->free_list);
{
yaz_log(YLOG_WARN, "Bad freelist entry " ZINT_FORMAT,
bf->free_list);
- exit(1);
+ return -1;
}
zebra_zint_decode(&cp, &bf->free_list);
}
}
zebra_zint_decode(&cp, &bf->free_list);
}
@@
-480,6
+513,7
@@
int bfs_shadow_directory_stat(BFiles bfs, int no, const char **directory,
/*
* Local variables:
* c-basic-offset: 4
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab