commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-2.2-431-g87e973d


From: Wojciech Polak
Subject: [SCM] GNU Mailutils branch, master, updated. release-2.2-431-g87e973d
Date: Tue, 08 Nov 2011 09:19:51 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=87e973ddd0b24493db0b316890360a2fdb028626

The branch, master has been updated
       via  87e973ddd0b24493db0b316890360a2fdb028626 (commit)
      from  1145460edacfc660d886d766bc660b940bfa1912 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 87e973ddd0b24493db0b316890360a2fdb028626
Author: Wojciech Polak <address@hidden>
Date:   Tue Nov 8 10:14:52 2011 +0100

    Re-add Tokyo Cabinet DBM support.
    
    * libmu_dbm/tokyo.c: New file.
    * libmu_dbm/Makefile.am (libmu_dbm_la_SOURCES): Add tokyo.c.
    * doc/texinfo/programs.texi: Update.
    * README: Update.

-----------------------------------------------------------------------

Summary of changes:
 README                    |    4 -
 doc/texinfo/programs.texi |    4 +-
 libmu_dbm/Makefile.am     |    3 +-
 libmu_dbm/tokyo.c         |  231 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 235 insertions(+), 7 deletions(-)
 create mode 100644 libmu_dbm/tokyo.c

diff --git a/README b/README
index 8bb2112..47f7b79 100644
--- a/README
+++ b/README
@@ -287,10 +287,6 @@ use DBM-based mail box quotas with maildag.
 
        Use Tokyo Cabinet DBM
 
-        Only one dbm option may be specified. Which one depends on
-        the flavor of DBM you are using. GDBM is most common for GNU
-        system.
-
 Use following options to disable support for particular protocols or
 features:
 
diff --git a/doc/texinfo/programs.texi b/doc/texinfo/programs.texi
index 84d9034..5932cd2 100644
--- a/doc/texinfo/programs.texi
+++ b/doc/texinfo/programs.texi
@@ -5648,8 +5648,8 @@ The mailbox quota can be retrieved from the following 
sources:
 
 To use @acronym{DBM} quota database, GNU Mailutils must
 be compiled with one of the following command line options:
address@hidden, @option{--with-berkeley-db}, or
address@hidden  Examine the output of @command{maidag
address@hidden, @option{--with-berkeley-db}, @option{--with-ndbm},
+or @option{--with-tokyocabinet}.  Examine the output of @command{maidag
 --show-config-options}, if not sure. 
 
 The quota database should have the following structure:
diff --git a/libmu_dbm/Makefile.am b/libmu_dbm/Makefile.am
index 548f46f..8db66ea 100644
--- a/libmu_dbm/Makefile.am
+++ b/libmu_dbm/Makefile.am
@@ -36,7 +36,8 @@ libmu_dbm_la_SOURCES = \
  store.c\
  berkeley.c\
  gdbm.c\
- ndbm.c
+ ndbm.c\
+ tokyo.c
 
 noinst_HEADERS = mudbm.h
 
diff --git a/libmu_dbm/tokyo.c b/libmu_dbm/tokyo.c
new file mode 100644
index 0000000..606769e
--- /dev/null
+++ b/libmu_dbm/tokyo.c
@@ -0,0 +1,231 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+   Copyright (C) 2011 Free Software Foundation, Inc.
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General
+   Public License along with this library.  If not, see
+   <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <mailutils/types.h>
+#include <mailutils/dbm.h>
+#include <mailutils/util.h>
+#include <mailutils/errno.h>
+#include <mailutils/error.h>
+#include <mailutils/stream.h>
+#include <mailutils/io.h>
+#include "mudbm.h"
+
+#if defined(WITH_TOKYOCABINET)
+#include <tcutil.h>
+#include <tchdb.h>
+
+static int
+_tc_file_safety (mu_dbm_file_t db, int mode, uid_t owner)
+{
+  return mu_file_safety_check (db->db_name, mode, owner, NULL);
+}
+
+int
+_tc_get_fd (mu_dbm_file_t db, int *pag, int *dir)
+{
+  TCHDB *hdb = db->db_descr;
+  *pag = hdb->fd;
+  if (dir)
+    *dir = *pag;
+  return 0;
+}
+
+static int
+_tc_open (mu_dbm_file_t db, int flags, int mode)
+{
+  int f;
+  bool result;
+  mode_t save_um;
+  TCHDB *hdb;
+
+  switch (flags)
+    {
+    case MU_STREAM_CREAT:
+      f = HDBOWRITER | HDBOCREAT;
+      break;
+
+    case MU_STREAM_READ:
+      f = HDBOREADER;
+      break;
+
+    case MU_STREAM_RDWR:
+      f = HDBOREADER | HDBOWRITER;
+      break;
+
+    default:
+      return EINVAL;
+    }
+
+  hdb = tchdbnew ();
+
+  save_um = umask (0666 & ~mode);
+  result = tchdbopen (hdb, db->db_name, f);
+  umask (save_um);
+  if (!result)
+    {
+      db->db_errno.n = tchdbecode (hdb);
+      return MU_ERR_FAILURE;
+    }
+  db->db_descr = hdb;
+  return 0;
+}
+
+static int
+_tc_close (mu_dbm_file_t db)
+{
+  if (db->db_descr)
+    {
+      TCHDB *hdb = db->db_descr;
+      tchdbclose (hdb);
+      tchdbdel (hdb);
+      db->db_descr = NULL;
+    }
+  return 0;
+}
+
+static int
+_tc_fetch (mu_dbm_file_t db, struct mu_dbm_datum const *key,
+          struct mu_dbm_datum *ret)
+{
+  TCHDB *hdb = db->db_descr;
+  void *ptr;
+  int retsize;
+
+  ptr = tchdbget (hdb, key->mu_dptr, key->mu_dsize, &retsize);
+  if (ptr)
+    {
+      mu_dbm_datum_free (ret);
+      ret->mu_dptr = ptr;
+      ret->mu_dsize = retsize;
+      return 0;
+    }
+  else if ((db->db_errno.n = tchdbecode (hdb)) == TCENOREC)
+    return MU_ERR_NOENT;
+  return MU_ERR_FAILURE;
+}
+
+static int
+_tc_store (mu_dbm_file_t db,
+          struct mu_dbm_datum const *key,
+          struct mu_dbm_datum const *contents,
+          int replace)
+{
+  TCHDB *hdb = db->db_descr;
+  bool result;
+
+  if (replace)
+    result = tchdbput (hdb, key->mu_dptr, key->mu_dsize,
+                      contents->mu_dptr, contents->mu_dsize);
+  else
+    result = tchdbputkeep (hdb, key->mu_dptr, key->mu_dsize,
+                          contents->mu_dptr, contents->mu_dsize);
+  if (result)
+    return 0;
+  db->db_errno.n = tchdbecode (hdb);
+  if (db->db_errno.n == TCEKEEP)
+    return MU_ERR_EXISTS;
+  return MU_ERR_FAILURE;
+}
+
+static int
+_tc_delete (mu_dbm_file_t db, struct mu_dbm_datum const *key)
+{
+  TCHDB *hdb = db->db_descr;
+
+  if (tchdbout (hdb, key->mu_dptr, key->mu_dsize))
+    return 0;
+  db->db_errno.n = tchdbecode (hdb);
+  if (db->db_errno.n == TCENOREC)
+    return MU_ERR_NOENT;
+  return MU_ERR_FAILURE;
+}
+
+static int
+_tc_firstkey (mu_dbm_file_t db, struct mu_dbm_datum *ret)
+{
+  TCHDB *hdb = db->db_descr;
+  void *ptr;
+  int retsize;
+
+  tchdbiterinit (hdb);
+  ptr = tchdbiternext (hdb, &retsize);
+  if (ptr)
+    {
+      mu_dbm_datum_free (ret);
+      ret->mu_dptr = ptr;
+      ret->mu_dsize = retsize;
+      return 0;
+    }
+  else if ((db->db_errno.n = tchdbecode (hdb)) == TCENOREC)
+    return MU_ERR_NOENT;
+  return MU_ERR_FAILURE;
+}
+
+static int
+_tc_nextkey (mu_dbm_file_t db, struct mu_dbm_datum *ret)
+{
+  TCHDB *hdb = db->db_descr;
+  void *ptr;
+  int retsize;
+
+  ptr = tchdbiternext (hdb, &retsize);
+  if (ptr)
+    {
+      mu_dbm_datum_free (ret);
+      ret->mu_dptr = ptr;
+      ret->mu_dsize = retsize;
+      return 0;
+    }
+  else if ((db->db_errno.n = tchdbecode (hdb)) == TCENOREC)
+    return MU_ERR_NOENT;
+  return MU_ERR_FAILURE;
+}
+
+static void
+_tc_datum_free (struct mu_dbm_datum *datum)
+{
+  free (datum->mu_dptr);
+}
+
+static char const *
+_tc_strerror (mu_dbm_file_t db)
+{
+  return tchdberrmsg (db->db_errno.n);
+}
+
+struct mu_dbm_impl _mu_dbm_tokyokabinet = {
+  "tc",
+  _tc_file_safety,
+  _tc_get_fd,
+  _tc_open,
+  _tc_close,
+  _tc_fetch,
+  _tc_store,
+  _tc_delete,
+  _tc_firstkey,
+  _tc_nextkey,
+  _tc_datum_free,
+  _tc_strerror
+};
+#endif


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]