aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2007-11-25 13:57:00 -0500
committerJeff Garzik <jeff@garzik.org>2007-11-25 13:57:00 -0500
commit24242b12c158906cb8c6e8acb6fce897d0e2b6d9 (patch)
tree39e2024f3d2ebf8f3dc867aa7374683806106d02
parent7e83485d748837b90adcd911bb73df04b9156e35 (diff)
downloaddbfs-24242b12c158906cb8c6e8acb6fce897d0e2b6d9.tar.gz
Properly clean up from open-db failure. Tighten default file perms.
-rw-r--r--libdbfs.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/libdbfs.c b/libdbfs.c
index 39c58e8..16e2cbd 100644
--- a/libdbfs.c
+++ b/libdbfs.c
@@ -19,6 +19,7 @@
*
*/
+#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
@@ -53,24 +54,31 @@ static int open_db(DB_ENV *env, DB **db_out, const char *name,
rc = db->set_pagesize(db, page_size);
if (rc) {
db->err(db, rc, "db->set_pagesize");
- return -EIO;
+ rc = -EIO;
+ goto err_out;
}
/* fix everything as little endian */
rc = db->set_lorder(db, 1234);
if (rc) {
db->err(db, rc, "db->set_lorder");
- return -EIO;
+ rc = -EIO;
+ goto err_out;
}
rc = db->open(db, NULL, name, NULL, DB_HASH,
- DB_AUTO_COMMIT | flags, 0666);
+ DB_AUTO_COMMIT | flags, S_IRUSR | S_IWUSR);
if (rc) {
db->err(db, rc, "db->open");
- return -EIO;
+ rc = -EIO;
+ goto err_out;
}
return 0;
+
+err_out:
+ db->close(db, 0);
+ return rc;
}
int dbfs_open(struct dbfs *fs, unsigned int env_flags, unsigned int flags,
@@ -117,7 +125,7 @@ int dbfs_open(struct dbfs *fs, unsigned int env_flags, unsigned int flags,
/* init DB transactional environment, stored in directory db_home */
rc = fs->env->open(fs->env, db_home,
DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |
- DB_INIT_TXN | env_flags, 0666);
+ DB_INIT_TXN | env_flags, S_IRUSR | S_IWUSR);
if (rc) {
fs->env->err(fs->env, rc, "fs->env->open");
goto err_out;