diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-08-08 05:59:56 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-08-08 05:59:56 -0400 |
commit | e0488a297b33e16c5557af17e4bebcad13dc6398 (patch) | |
tree | a343a77f301a1b62b104ee84cfbbed5c5bd8c708 | |
parent | 86dff3c597337fd52519f473c96d5451666995c2 (diff) | |
download | dbfs-e0488a297b33e16c5557af17e4bebcad13dc6398.tar.gz |
Fix some initialization-related bugs in mkdbfs, libdbfs.
-rw-r--r-- | dbfs.c | 2 | ||||
-rw-r--r-- | dbfsck.c | 5 | ||||
-rw-r--r-- | libdbfs.c | 25 | ||||
-rw-r--r-- | mkdbfs.c | 7 |
4 files changed, 22 insertions, 17 deletions
@@ -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 */ @@ -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; @@ -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) { @@ -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(); |