]> arthur.barton.de Git - netatalk.git/blobdiff - etc/cnid_dbd/cmd_dbd_scanvol.c
Adjust dbd to use the same fixup logic as afpd ie call dbd_lookup with hint
[netatalk.git] / etc / cnid_dbd / cmd_dbd_scanvol.c
index 1d6d6a920287f112e51a84e72a147d3464392776..3addca9fda336837f1d30d0c79c28cc0dcc1d210 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  $Id: cmd_dbd_scanvol.c,v 1.10 2009-10-14 01:38:28 didg Exp $
+  $Id: cmd_dbd_scanvol.c,v 1.13 2009-12-09 15:25:28 franklahm Exp $
 
   Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
 
@@ -387,7 +387,7 @@ static int read_addir(void)
         dbd_log(LOGSTD, "Couldn't chdir back to '%s' from AppleDouble dir: %s",
                 cwdbuf, strerror(errno));
         /* This really is EOT! */
-        exit(1);
+        longjmp(jmp, 1); /* this jumps back to cmd_dbd_scanvol() */
     }
 
     closedir(dp);
@@ -435,6 +435,7 @@ static cnid_t check_cnid(const char *name, cnid_t did, struct stat *st, int adfi
     memset(&rqst, 0, sizeof(struct cnid_dbd_rqst));
     memset(&rply, 0, sizeof(struct cnid_dbd_rply));
     rqst.did = did;
+    rqst.cnid = ad_cnid;
     if ( ! (volinfo->v_flags & AFPVOL_NODEV))
         rqst.dev = st->st_dev;
     rqst.ino = st->st_ino;
@@ -443,7 +444,7 @@ static cnid_t check_cnid(const char *name, cnid_t did, struct stat *st, int adfi
     rqst.namelen = strlen(name);
 
     /* Query the database */
-    ret = cmd_dbd_lookup(dbd, &rqst, &rply, (dbd_flags & DBD_FLAGS_SCAN) ? 1 : 0);
+    ret = dbd_lookup(dbd, &rqst, &rply, (dbd_flags & DBD_FLAGS_SCAN) ? 1 : 0);
     dbif_txn_close(dbd, ret);
     if (rply.result == CNID_DBD_RES_OK) {
         db_cnid = rply.cnid;
@@ -492,7 +493,7 @@ static cnid_t check_cnid(const char *name, cnid_t did, struct stat *st, int adfi
         /* Note: the next test will use this new CNID too! */
         if ( ! (dbd_flags & DBD_FLAGS_SCAN)) {
             /* add to db */
-            ret = cmd_dbd_add(dbd, &rqst, &rply);
+            ret = dbd_add(dbd, &rqst, &rply, 1);
             dbif_txn_close(dbd, ret);
             db_cnid = rply.cnid;
             dbd_log( LOGSTD, "New CNID for '%s/%s': %u", cwdbuf, name, ntohl(db_cnid));
@@ -609,7 +610,7 @@ static int dbd_readdir(int volroot, cnid_t did)
                 if (rply.result != CNID_DBD_RES_OK) {
                     dbd_log( LOGDEBUG, "Fatal error adding CNID: %u for '%s/%s' to in-memory rebuild-db",
                              cnid, cwdbuf, ep->d_name);
-                    exit(EXIT_FAILURE);
+                    longjmp(jmp, 1); /* this jumps back to cmd_dbd_scanvol() */
                 }
             }
         }