- if (! nocniddb) {
- /* Get volume stamp */
- dbd_getstamp(dbd, &rqst, &rply);
- if (rply.result != CNID_DBD_RES_OK)
- goto exit_cleanup;
- memcpy(stamp, rply.name, CNID_DEV_LEN);
-
- /* open/create rebuild dbd, copy rootinfo key */
- if (NULL == (dbd_rebuild = dbif_init(NULL, NULL)))
- return -1;
- if (0 != (dbif_open(dbd_rebuild, &db_param, 0)))
- return -1;
- if (0 != (dbif_copy_rootinfokey(dbd, dbd_rebuild)))
- goto exit_cleanup;
+ /* Get volume stamp */
+ dbd_getstamp(dbd, &rqst, &rply);
+ if (rply.result != CNID_DBD_RES_OK) {
+ ret = -1;
+ goto exit;
+ }
+ memcpy(stamp, rply.name, CNID_DEV_LEN);
+
+ /* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */
+ if (! nocniddb && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE)) {
+ tmpdb_path = get_tmpdb_path();
+ if (NULL == (dbd_rebuild = dbif_init(tmpdb_path, "cnid2.db"))) {
+ ret = -1;
+ goto exit;
+ }
+
+ if (dbif_env_open(dbd_rebuild,
+ &db_param,
+ DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN) < 0) {
+ dbd_log(LOGSTD, "error opening tmp database!");
+ goto exit;
+ }
+
+ if (0 != (dbif_open(dbd_rebuild, NULL, 0))) {
+ ret = -1;
+ goto exit;
+ }
+
+ if (0 != (dbif_copy_rootinfokey(dbd, dbd_rebuild))) {
+ ret = -1;
+ goto exit;
+ }