struct dirent *ep;
static struct stat st; /* Save some stack space */
+ /* keep trying to get the lock */
+ if (!db_locked)
+ if ((db_locked = get_lock(1, NULL)) == -1)
+ return -1;
+
/* Check again for .AppleDouble folder, check_adfile also checks/creates it */
if ((addir_ok = check_addir(volroot)) != 0)
if ( ! (dbd_flags & DBD_FLAGS_SCAN))
}
/* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */
- if (! nocniddb && !(flags & DBD_FLAGS_FORCE)) {
+ if (! nocniddb && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE)) {
/* Get volume stamp */
dbd_getstamp(dbd, &rqst, &rply);
if (rply.result != CNID_DBD_RES_OK)
exit:
if (! nocniddb) {
- if (dbif_txn_close(dbd, 2) != 0)
+ if (dbif_txn_close(dbd, ret == 0 ? 1 : 0) != 0)
ret = -1;
if (dbd_rebuild)
- if (dbif_txn_close(dbd_rebuild, 2) != 0)
+ if (dbif_txn_close(dbd_rebuild, ret == 0 ? 1 : 0) != 0)
ret = -1;
if ((ret == 0) && dbd_rebuild && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE))
/* We can only do this in exclusive mode, otherwise we might delete CNIDs added from