]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/cnid/cnid_update.c
Warning fixes.
[netatalk.git] / libatalk / cnid / cnid_update.c
index a7a4cbca7559e1efd80d5e94e85a7424346844e5..92aafee40266a4175b9f4fa10f1b3d4a4601d65f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: cnid_update.c,v 1.18 2002-01-21 04:06:41 jmarcus Exp $
+ * $Id: cnid_update.c,v 1.21 2003-06-06 21:22:45 srittau Exp $
  */
 
 #ifdef HAVE_CONFIG_H
 #include <atalk/adouble.h>
 #include <atalk/cnid.h>
 
+#define use_make_cnid_data
 #include "cnid_private.h"
 
+#ifdef CNID_DB_CDB
+    #define tid    NULL
+#endif /* CNID_DB_CDB */
+
 /* cnid_update: takes the given cnid and updates the metadata.  To
  * handle the did/name data, there are a bunch of functions to get
  * and set the various fields. */
@@ -30,7 +35,9 @@ int cnid_update(void *CNID, const cnid_t id, const struct stat *st,
 {
     CNID_private *db;
     DBT key, data, altdata;
+#ifndef CNID_DB_CDB
     DB_TXN *tid;
+#endif /* CNID_DB_CDB */
     int rc;
 
     if (!(db = CNID) || !id || !st || !name || (db->flags & CNIDFLAG_DB_RO)) {
@@ -40,21 +47,29 @@ int cnid_update(void *CNID, const cnid_t id, const struct stat *st,
     memset(&key, 0, sizeof(key));
     memset(&altdata, 0, sizeof(altdata));
 
+#ifndef CNID_DB_CDB
 retry:
     if ((rc = txn_begin(db->dbenv, NULL, &tid, 0))) {
         LOG(log_error, logtype_default, "cnid_update: Failed to begin transaction: %s", db_strerror(rc));
         return rc;
     }
+#endif /* CNID_DB_CDB */
 
     /* Get the old info. */
     key.data = (cnid_t *)&id;
     key.size = sizeof(id);
     memset(&data, 0, sizeof(data));
+#ifdef CNID_DB_CDB
+    if ((rc = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) {
+#else  /* CNID_DB_CDB */
     if ((rc = db->db_cnid->get(db->db_cnid, tid, &key, &data, DB_RMW))) {
         txn_abort(tid);
+#endif /* CNID_DB_CDB */
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             goto retry;
+#endif /* CNID_DB_CDB */
         case DB_NOTFOUND:
             /* Silently fail here.  We're allowed to do this since this CNID
              * might have been deleted out from under us, or someone has
@@ -70,13 +85,17 @@ retry:
     key.size = CNID_DEVINO_LEN;
     if ((rc = db->db_devino->del(db->db_devino, tid, &key, 0))) {
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             txn_abort(tid);
             goto retry;
+#endif /* CNID_DB_CDB */
         case DB_NOTFOUND:
             break;
         default:
+#ifndef CNID_DB_CDB
             txn_abort(tid);
+#endif /* CNID_DB_CDB */
             goto update_err;
         }
     }
@@ -86,13 +105,17 @@ retry:
     key.size = data.size - CNID_DEVINO_LEN;
     if ((rc = db->db_didname->del(db->db_didname, tid, &key, 0))) {
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             txn_abort(tid);
             goto retry;
+#endif /* CNID_DB_CDB */
         case DB_NOTFOUND:
             break;
         default:
+#ifndef CNID_DB_CDB
             txn_abort(tid);
+#endif /* CNID_DB_CDB */
             goto update_err;
         }
     }
@@ -105,10 +128,14 @@ retry:
     key.data = (cnid_t *) &id;
     key.size = sizeof(id);
     if ((rc = db->db_cnid->put(db->db_cnid, tid, &key, &data, 0))) {
+#ifndef CNID_DB_CDB
         txn_abort(tid);
+#endif /* CNID_DB_CDB */
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             goto retry;
+#endif /* CNID_DB_CDB */
         default:
             goto update_err;
         }
@@ -120,10 +147,14 @@ retry:
     altdata.data = (cnid_t *) &id;
     altdata.size = sizeof(id);
     if ((rc = db->db_devino->put(db->db_devino, tid, &key, &altdata, 0))) {
+#ifndef CNID_DB_CDB
         txn_abort(tid);
+#endif /* CNID_DB_CDB */
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             goto retry;
+#endif /* CNID_DB_CDB */
         default:
             goto update_err;
         }
@@ -133,17 +164,25 @@ retry:
     key.data = (char *) data.data + CNID_DEVINO_LEN;
     key.size = data.size - CNID_DEVINO_LEN;
     if ((rc = db->db_didname->put(db->db_didname, tid, &key, &altdata, 0))) {
+#ifndef CNID_DB_CDB
         txn_abort(tid);
+#endif /* CNID_DB_CDB */
         switch (rc) {
+#ifndef CNID_DB_CDB
         case DB_LOCK_DEADLOCK:
             goto retry;
+#endif /* CNID_DB_CDB */
         default:
             goto update_err;
         }
     }
 
 
+#ifdef CNID_DB_CDB
+    return 0;
+#else  /* CNID_DB_CDB */
     return txn_commit(tid, 0);
+#endif /* CNID_DB_CDB */
 
 update_err:
     LOG(log_error, logtype_default, "cnid_update: Unable to update CNID %u: %s",