diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-08-04 11:07:37 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-08-04 11:07:37 -0400 |
commit | 073e2ad9220f6aef4ecd6512d4800e57e6063b57 (patch) | |
tree | ae19f8ffa1808dacf301f49171b8150793f587a9 | |
parent | 31a6352886789f6fb36190374b10eecf0cfbb14d (diff) | |
download | dbfs-073e2ad9220f6aef4ecd6512d4800e57e6063b57.tar.gz |
Add filesystem check program 'dbfsck'.
All it does right now is execute Berkeley DB's internal database
recovery code. None of the internal data structures are yet checked.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile.am | 5 | ||||
-rw-r--r-- | dbfs.c | 2 | ||||
-rw-r--r-- | dbfs.h | 2 | ||||
-rw-r--r-- | dbfsck.c | 21 | ||||
-rw-r--r-- | libdbfs.c | 4 | ||||
-rw-r--r-- | mkdbfs.c | 2 |
7 files changed, 31 insertions, 6 deletions
@@ -22,6 +22,7 @@ stamp-h1 # app-specific mkdbfs dbfs +dbfsck dbfs-config.h* libdbfs.a diff --git a/Makefile.am b/Makefile.am index cbc139d..dcf51fc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,7 +6,7 @@ INCLUDES = @GLIB_CFLAGS@ @FUSE_CFLAGS@ noinst_LIBRARIES = libdbfs.a -sbin_PROGRAMS = dbfs mkdbfs +sbin_PROGRAMS = dbfs mkdbfs dbfsck libdbfs_a_SOURCES = libdbfs.c @@ -16,5 +16,8 @@ dbfs_LDADD = @GLIB_LIBS@ @FUSE_LIBS@ @DB_LIBS@ libdbfs.a mkdbfs_SOURCES = mkdbfs.c mkdbfs_LDADD = @GLIB_LIBS@ @DB_LIBS@ libdbfs.a +dbfsck_SOURCES = dbfsck.c +dbfsck_LDADD = @GLIB_LIBS@ @DB_LIBS@ libdbfs.a + EXTRA_DIST = autogen.sh SCHEMA @@ -42,7 +42,7 @@ static void dbfs_op_init(void *userdata) fs = dbfs_new(); - rc = dbfs_open(fs, 0, "dbfs"); + rc = dbfs_open(fs, 0, 0, "dbfs"); if (rc) abort(); /* TODO: improve */ @@ -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 *, unsigned int, const char *); +extern int dbfs_open(struct dbfs *, unsigned int, 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/dbfsck.c b/dbfsck.c new file mode 100644 index 0000000..e9f667d --- /dev/null +++ b/dbfsck.c @@ -0,0 +1,21 @@ + +#include <db.h> +#include "dbfs.h" + +int main (int argc, char *argv[]) +{ + struct dbfs *fs; + int rc; + + fs = dbfs_new(); + + rc = dbfs_open(fs, DB_RECOVER, 0, "dbfsck"); + if (rc) { + perror("dbfsck"); + return 1; + } + + dbfs_close(fs); + return 0; +} + @@ -9,7 +9,7 @@ struct dbfs *gfs; -int dbfs_open(struct dbfs *fs, unsigned int flags, const char *errpfx) +int dbfs_open(struct dbfs *fs, unsigned int env_flags, unsigned int flags, const char *errpfx) { const char *db_home, *db_password; int rc; @@ -53,7 +53,7 @@ int dbfs_open(struct dbfs *fs, unsigned int flags, const char *errpfx) /* 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 | flags, 0666); + DB_INIT_TXN | env_flags | flags, 0666); if (rc) { fs->env->err(fs->env, rc, "fs->env->open"); goto err_out; @@ -50,7 +50,7 @@ err_die: int main (int argc, char *argv[]) { struct dbfs *fs = dbfs_new(); - int rc = dbfs_open(fs, DB_CREATE | DB_TRUNCATE, "mkdbfs"); + int rc = dbfs_open(fs, 0, DB_CREATE | DB_TRUNCATE, "mkdbfs"); if (rc) { perror("mkdbfs"); exit(1); |