aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Garzik <jeff@garzik.org>2006-08-04 10:58:49 -0400
committerJeff Garzik <jeff@garzik.org>2006-08-04 10:58:49 -0400
commit31a6352886789f6fb36190374b10eecf0cfbb14d (patch)
treeae3f191852467df7a4dafc523695fe3ddd4150d9
parentedfeb83763d87b31ab8f2359e4c826edb64d6be2 (diff)
downloaddbfs-31a6352886789f6fb36190374b10eecf0cfbb14d.tar.gz
mkdbfs: Remove duplicate code, by using dbfs_open() in libdbfs
-rw-r--r--dbfs.c2
-rw-r--r--dbfs.h2
-rw-r--r--libdbfs.c7
-rw-r--r--mkdbfs.c108
4 files changed, 13 insertions, 106 deletions
diff --git a/dbfs.c b/dbfs.c
index b0fe751..5fb7b41 100644
--- a/dbfs.c
+++ b/dbfs.c
@@ -42,7 +42,7 @@ static void dbfs_op_init(void *userdata)
fs = dbfs_new();
- rc = dbfs_open(fs);
+ rc = dbfs_open(fs, 0, "dbfs");
if (rc)
abort(); /* TODO: improve */
diff --git a/dbfs.h b/dbfs.h
index 5ef86fd..756c1ee 100644
--- a/dbfs.h
+++ b/dbfs.h
@@ -114,7 +114,7 @@ extern int dbfs_xattr_remove(guint64, const char *, gboolean);
extern int dbfs_xattr_list(guint64 ino, void **buf_out, size_t *buflen_out);
/* libdbfs.c */
-extern int dbfs_open(struct dbfs *fs);
+extern int dbfs_open(struct dbfs *, unsigned int, const char *);
extern void dbfs_close(struct dbfs *fs);
extern struct dbfs *dbfs_new(void);
extern void dbfs_free(struct dbfs *fs);
diff --git a/libdbfs.c b/libdbfs.c
index d51fa35..8a6bcd0 100644
--- a/libdbfs.c
+++ b/libdbfs.c
@@ -9,11 +9,10 @@
struct dbfs *gfs;
-int dbfs_open(struct dbfs *fs)
+int dbfs_open(struct dbfs *fs, unsigned int flags, const char *errpfx)
{
const char *db_home, *db_password;
int rc;
- unsigned int flags = 0;
/*
* open DB environment
@@ -36,7 +35,7 @@ int dbfs_open(struct dbfs *fs)
/* stderr is wrong; should use syslog instead */
fs->env->set_errfile(fs->env, stderr);
- fs->env->set_errpfx(fs->env, "dbfs");
+ fs->env->set_errpfx(fs->env, errpfx);
if (db_password) {
flags |= DB_ENCRYPT;
@@ -54,7 +53,7 @@ int dbfs_open(struct dbfs *fs)
/* 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 | DB_RECOVER | DB_CREATE | flags, 0666);
+ DB_INIT_TXN | DB_RECOVER | flags, 0666);
if (rc) {
fs->env->err(fs->env, rc, "fs->env->open");
goto err_out;
diff --git a/mkdbfs.c b/mkdbfs.c
index 8670c2a..74a7051 100644
--- a/mkdbfs.c
+++ b/mkdbfs.c
@@ -10,103 +10,6 @@
#include <db.h>
#include "dbfs.h"
-struct dbfs *gfs;
-
-void create_db(void)
-{
- const char *db_home, *db_password;
- int rc;
- unsigned int flags = 0;
-
- /*
- * open DB environment
- */
-
- db_home = getenv("DB_HOME");
- if (!db_home) {
- fprintf(stderr, "DB_HOME not set\n");
- exit(1);
- }
-
- /* this isn't a very secure way to handle passwords */
- db_password = getenv("DB_PASSWORD");
-
- rc = db_env_create(&gfs->env, 0);
- if (rc) {
- fprintf(stderr, "gfs->env_create failed: %d\n", rc);
- exit(1);
- }
-
- gfs->env->set_errfile(gfs->env, stderr);
- gfs->env->set_errpfx(gfs->env, "mkdbfs");
-
- if (db_password) {
- flags |= DB_ENCRYPT;
- rc = gfs->env->set_encrypt(gfs->env, db_password, DB_ENCRYPT_AES);
- if (rc) {
- gfs->env->err(gfs->env, rc, "gfs->env->set_encrypt");
- goto err_out;
- }
-
- /* FIXME: this isn't a very good way to shroud the password */
- if (putenv("DB_PASSWORD=X"))
- perror("putenv (SECURITY WARNING)");
- }
-
- /* init DB transactional environment, stored in directory db_home */
- rc = gfs->env->open(gfs->env, db_home,
- DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL |
- DB_INIT_TXN | DB_CREATE | flags, 0666);
- if (rc) {
- gfs->env->err(gfs->env, rc, "gfs->env->open");
- goto err_out;
- }
-
- /*
- * Open metadata database
- */
-
- rc = db_create(&gfs->meta, gfs->env, 0);
- if (rc) {
- gfs->env->err(gfs->env, rc, "db_create");
- goto err_out;
- }
-
- rc = gfs->meta->open(gfs->meta, NULL, "metadata", NULL,
- DB_HASH,
- DB_AUTO_COMMIT | DB_CREATE | DB_TRUNCATE | flags,
- 0666);
- if (rc) {
- gfs->meta->err(gfs->meta, rc, "gfs->meta->open");
- goto err_out_meta;
- }
-
- /* our data items are small, so use the smallest possible page
- * size. This is a guess, and should be verified by looking at
- * overflow pages and other DB statistics.
- */
- rc = gfs->meta->set_pagesize(gfs->meta, 512);
- if (rc) {
- gfs->meta->err(gfs->meta, rc, "gfs->meta->set_pagesize");
- goto err_out_meta;
- }
-
- /* fix everything as little endian */
- rc = gfs->meta->set_lorder(gfs->meta, 1234);
- if (rc) {
- gfs->meta->err(gfs->meta, rc, "gfs->meta->set_lorder");
- goto err_out_meta;
- }
-
- return;
-
-err_out_meta:
- gfs->meta->close(gfs->meta, 0);
-err_out:
- gfs->env->close(gfs->env, 0);
- exit(1);
-}
-
static void make_root_dir(void)
{
struct dbfs_inode *ino;
@@ -146,10 +49,15 @@ err_die:
int main (int argc, char *argv[])
{
- gfs = dbfs_new();
- create_db();
+ struct dbfs *fs = dbfs_new();
+ int rc = dbfs_open(fs, DB_CREATE | DB_TRUNCATE, "mkdbfs");
+ if (rc) {
+ perror("mkdbfs");
+ exit(1);
+ }
+
make_root_dir();
- dbfs_close(gfs);
+ dbfs_close(fs);
return 0;
}