aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-08-08 05:59:56 -0400
committerJeff Garzik <jeff@garzik.org>2006-08-08 05:59:56 -0400
commite0488a297b33e16c5557af17e4bebcad13dc6398 (patch)
treea343a77f301a1b62b104ee84cfbbed5c5bd8c708
parent86dff3c597337fd52519f473c96d5451666995c2 (diff)
downloaddbfs-e0488a297b33e16c5557af17e4bebcad13dc6398.tar.gz
Fix some initialization-related bugs in mkdbfs, libdbfs.
-rw-r--r--dbfs.c2
-rw-r--r--dbfsck.c5
-rw-r--r--libdbfs.c25
-rw-r--r--mkdbfs.c7
4 files changed, 22 insertions, 17 deletions
diff --git a/dbfs.c b/dbfs.c
index 324366b..ba41939 100644
--- a/dbfs.c
+++ b/dbfs.c
@@ -80,7 +80,7 @@ static void dbfs_op_init(void *userdata)
fs = dbfs_new();
- rc = dbfs_open(fs, DB_RECOVER | DB_CREATE, 0, "dbfs");
+ rc = dbfs_open(fs, DB_RECOVER | DB_CREATE, DB_CREATE, "dbfs");
if (rc)
abort(); /* TODO: improve */
diff --git a/dbfsck.c b/dbfsck.c
index 7cf8628..3f7e169 100644
--- a/dbfsck.c
+++ b/dbfsck.c
@@ -29,7 +29,10 @@ int main (int argc, char *argv[])
gfs = fs;
- rc = dbfs_open(fs, DB_RECOVER_FATAL, DB_CREATE, "dbfsck");
+ if (!fs)
+ return 1;
+
+ rc = dbfs_open(fs, DB_RECOVER_FATAL | DB_CREATE, DB_CREATE, "dbfsck");
if (rc) {
perror("dbfsck");
return 1;
diff --git a/libdbfs.c b/libdbfs.c
index 7738e15..234ed8e 100644
--- a/libdbfs.c
+++ b/libdbfs.c
@@ -41,13 +41,6 @@ static int open_db(DB_ENV *env, DB **db_out, const char *name,
db = *db_out;
- rc = db->open(db, NULL, name, NULL, DB_HASH,
- DB_AUTO_COMMIT | flags, 0666);
- if (rc) {
- db->err(db, rc, "db->open");
- return -EIO;
- }
-
rc = db->set_pagesize(db, page_size);
if (rc) {
db->err(db, rc, "db->set_pagesize");
@@ -61,6 +54,13 @@ static int open_db(DB_ENV *env, DB **db_out, const char *name,
return -EIO;
}
+ rc = db->open(db, NULL, name, NULL, DB_HASH,
+ DB_AUTO_COMMIT | flags, 0666);
+ if (rc) {
+ db->err(db, rc, "db->open");
+ return -EIO;
+ }
+
return 0;
}
@@ -75,10 +75,7 @@ int dbfs_open(struct dbfs *fs, unsigned int env_flags, unsigned int flags,
*/
db_home = fs->home;
- if (!db_home) {
- fprintf(stderr, "DB_HOME not set\n");
- return -EINVAL;
- }
+ g_assert(db_home != NULL);
/* this isn't a very secure way to handle passwords */
db_password = fs->passwd;
@@ -109,7 +106,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 | flags, 0666);
+ DB_INIT_TXN | env_flags, 0666);
if (rc) {
fs->env->err(fs->env, rc, "fs->env->open");
goto err_out;
@@ -163,8 +160,10 @@ struct dbfs *dbfs_new(void)
fs->next_inode = 2ULL;
fs->home = getenv("DB_HOME");
- if (!fs->home)
+ if (!fs->home) {
+ fprintf(stderr, "DB_HOME not set, aborting\n");
goto err_out;
+ }
passwd = getenv("DB_PASSWORD");
if (passwd) {
diff --git a/mkdbfs.c b/mkdbfs.c
index 60d20aa..01ea171 100644
--- a/mkdbfs.c
+++ b/mkdbfs.c
@@ -71,10 +71,13 @@ int main (int argc, char *argv[])
gfs = fs;
- int rc = dbfs_open(fs, 0, DB_CREATE | DB_TRUNCATE, "mkdbfs");
+ if (!fs)
+ return 1;
+
+ int rc = dbfs_open(fs, DB_CREATE, DB_CREATE, "mkdbfs");
if (rc) {
perror("mkdbfs");
- exit(1);
+ return 1;
}
make_root_dir();