/*
- $Id: cmd_dbd_scanvol.c,v 1.9 2009-10-12 11:30:52 franklahm 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>
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);
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;
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;
/* 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));
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() */
}
}
}
/*
Remove all CNIDs from dbd that are not in dbd_rebuild
*/
-void delete_orphaned_cnids(DBD *dbd, DBD *dbd_rebuild, dbd_flags_t flags)
+static void delete_orphaned_cnids(DBD *dbd, DBD *dbd_rebuild, dbd_flags_t flags)
{
int ret, deleted = 0;
cnid_t dbd_cnid = 0, rebuild_cnid = 0;