]> arthur.barton.de Git - netatalk.git/blobdiff - etc/cnid_dbd/dbd_rebuild_add.c
Add a flag to load_volumes() that controls load behaviour
[netatalk.git] / etc / cnid_dbd / dbd_rebuild_add.c
index 3b2a26e03a1385653c4c3a91b2522514420c5936..3aee1c9472da11a22cab8374d5312158b12bddf4 100644 (file)
@@ -1,5 +1,4 @@
 /*
- * $Id: dbd_rebuild_add.c,v 1.2 2005-04-28 20:49:48 bfernhomberg Exp $
  *
  * Copyright (C) Joerg Lenneis 2005
  * All Rights Reserved.  See COPYING.
 
 #include <stdio.h>
 #include <string.h>
-#include <atalk/logger.h>
-#include <netatalk/endian.h>
-#include <atalk/cnid_dbd_private.h>
+#include <arpa/inet.h>
 
+#include <atalk/logger.h>
+#include <atalk/cnid_bdb_private.h>
 
 #include "pack.h"
 #include "dbif.h"
 /* rebuild_add: Enter all fields (including the CNID) into the database and
    update the current cnid, for emergency repairs. */
 
-int dbd_rebuild_add(struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply)
+int dbd_rebuild_add(DBD *dbd, struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply)
 {
     DBT key, data;
     cnid_t cur, tmp, id;
-    
+
     memset(&key, 0, sizeof(key));
     memset(&data, 0, sizeof(data));
 
@@ -43,34 +42,39 @@ int dbd_rebuild_add(struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply)
 
     /* FIXME: In cnid_cdb.c Bjoern does a lookup here and returns the CNID found if sucessful. Why? */
 
-    if (dbif_put(DBIF_IDX_CNID, &key, &data, 0) < 0) {
-       rply->result = CNID_DBD_RES_ERR_DB;
-       return -1;
+    if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0) {
+        rply->result = CNID_DBD_RES_ERR_DB;
+        return -1;
     }
 
-    key.data = ROOTINFO_KEY;   
+    LOG(log_debug, logtype_cnid,
+        "dbd_rebuild_add(CNID: %u, did: %u, name: \"%s\", dev/ino:0x%llx/0x%llx): success",
+        ntohl(rqst->cnid), ntohl(rqst->did), rqst->name,
+        (unsigned long long)rqst->dev, (unsigned long long)rqst->ino);
+
+    key.data = ROOTINFO_KEY;
     key.size = ROOTINFO_KEYLEN;
-    
-    if (dbif_get(DBIF_IDX_CNID, &key, &data, 0) <= 0) {
-       /* FIXME: If we cannot find ROOTINFO_KEY, should this be considered
+
+    if (dbif_get(dbd, DBIF_CNID, &key, &data, 0) <= 0) {
+        /* FIXME: If we cannot find ROOTINFO_KEY, should this be considered
            fatal or should we just return 0 and roll back? */
-       rply->result = CNID_DBD_RES_ERR_DB;
-       return -1;
+        rply->result = CNID_DBD_RES_ERR_DB;
+        return -1;
     }
-    
-    memcpy(&tmp, (char *) data.data + CNID_TYPE_OFS, sizeof(cnid_t));    
+
+    memcpy(&tmp, (char *) data.data + CNID_TYPE_OFS, sizeof(cnid_t));
     cur = ntohl(tmp);
     id  = ntohl(rqst->cnid);
 
     if (id > cur) {
-       data.size = ROOTINFO_DATALEN;
-       memcpy((char *) data.data + CNID_TYPE_OFS, &rqst->cnid, sizeof(cnid_t));
-       if (dbif_put(DBIF_IDX_CNID, &key, &data, 0) < 0) {
-           rply->result = CNID_DBD_RES_ERR_DB;
-           return -1;
-       }
+        data.size = ROOTINFO_DATALEN;
+        memcpy((char *) data.data + CNID_TYPE_OFS, &rqst->cnid, sizeof(cnid_t));
+        if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0) {
+            rply->result = CNID_DBD_RES_ERR_DB;
+            return -1;
+        }
     }
-    
+
     rply->cnid = rqst->cnid;
     rply->result = CNID_DBD_RES_OK;
     return 1;