diff options
-rw-r--r-- | doc/gdbm.texi | 9 | ||||
-rw-r--r-- | src/gdbm.h.in | 2 | ||||
-rw-r--r-- | src/gdbmcount.c | 16 | ||||
-rw-r--r-- | src/gdbmtool.c | 10 |
4 files changed, 29 insertions, 8 deletions
diff --git a/doc/gdbm.texi b/doc/gdbm.texi index 159a108..53c9782 100644 --- a/doc/gdbm.texi +++ b/doc/gdbm.texi @@ -234,2 +234,3 @@ int gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag); int gdbm_count (GDBM_FILE dbf, gdbm_count_t *pcount); +int gdbm_bucket_count (GDBM_FILE dbf, size_t *pcount); int gdbm_version_cmp (int const a[], int const b[]); @@ -396,2 +397,10 @@ and returns -1. +@deftypefn {gdbm interface} int gdbm_bucket_count (GDBM_FILE @var{dbf}, @ + size_t *@var{pcount}) +Counts number of buckets in the database @var{dbf}. On success, +stores it in the memory location pointed to by @var{pcount} and return +0. On error, sets @code{gdbm_errno} (if relevant, also @code{errno}) +and returns -1. +@end deftypefn + @node Store diff --git a/src/gdbm.h.in b/src/gdbm.h.in index 804e051..668af7c 100644 --- a/src/gdbm.h.in +++ b/src/gdbm.h.in @@ -135,2 +135,4 @@ extern int gdbm_import_from_file (GDBM_FILE dbf, FILE *fp, int flag); extern int gdbm_count (GDBM_FILE dbf, gdbm_count_t *pcount); +extern int gdbm_bucket_count (GDBM_FILE dbf, size_t *pcount); + diff --git a/src/gdbmcount.c b/src/gdbmcount.c index 4a78bc0..c81a461 100644 --- a/src/gdbmcount.c +++ b/src/gdbmcount.c @@ -42 +42,17 @@ gdbm_count (GDBM_FILE dbf, gdbm_count_t *pcount) } + +int +gdbm_bucket_count (GDBM_FILE dbf, size_t *pcount) +{ + int i; + size_t count = 0; + + GDBM_ASSERT_CONSISTENCY (dbf, -1); + + for (i = 0; i < GDBM_DIR_COUNT (dbf); i = _gdbm_next_bucket_dir (dbf, i)) + { + ++count; + } + *pcount = count; + return 0; +} diff --git a/src/gdbmtool.c b/src/gdbmtool.c index f9a4924..f439207 100644 --- a/src/gdbmtool.c +++ b/src/gdbmtool.c @@ -790,13 +790,7 @@ bucket_count (void) { - int i; - off_t last = 0; size_t count = 0; - for (i = 0; i < GDBM_DIR_COUNT (gdbm_file); i++) + if (gdbm_bucket_count (gdbm_file, &count)) { - if (gdbm_file->dir[i] != last) - { - ++count; - last = gdbm_file->dir[i]; - } + terror ("gdbm_bucket_count: %s", gdbm_strerror (gdbm_errno)); } |