+/*
+ * We unCAPed a name, update CNID db
+ */
+static int update_cnid(cnid_t did, const struct stat *sp, const char *oldname, const char *newname)
+{
+ int ret;
+ cnid_t id;
+
+ /* Prepare request data */
+ memset(&rqst, 0, sizeof(struct cnid_dbd_rqst));
+ memset(&rply, 0, sizeof(struct cnid_dbd_rply));
+ rqst.did = did;
+ rqst.cnid = 0;
+ if ( ! (myvol->v_flags & AFPVOL_NODEV))
+ rqst.dev = sp->st_dev;
+ rqst.ino = sp->st_ino;
+ rqst.type = S_ISDIR(sp->st_mode) ? 1 : 0;
+ rqst.name = (char *)oldname;
+ rqst.namelen = strlen(oldname);
+
+ /* Query the database */
+ ret = dbd_lookup(dbd, &rqst, &rply, (dbd_flags & DBD_FLAGS_SCAN) ? 1 : 0);
+ if (dbif_txn_close(dbd, ret) != 0)
+ return -1;
+ if (rply.result != CNID_DBD_RES_OK)
+ return 0;
+ id = rply.cnid;
+
+ /* Prepare request data */
+ memset(&rqst, 0, sizeof(struct cnid_dbd_rqst));
+ memset(&rply, 0, sizeof(struct cnid_dbd_rply));
+ rqst.did = did;
+ rqst.cnid = id;
+ if ( ! (myvol->v_flags & AFPVOL_NODEV))
+ rqst.dev = sp->st_dev;
+ rqst.ino = sp->st_ino;
+ rqst.type = S_ISDIR(sp->st_mode) ? 1 : 0;
+ rqst.name = (char *)newname;
+ rqst.namelen = strlen(newname);
+
+ /* Update the database */
+ ret = dbd_update(dbd, &rqst, &rply);
+ if (dbif_txn_close(dbd, ret) != 0)
+ return -1;
+ if (rply.result != CNID_DBD_RES_OK)
+ return -1;
+
+ return 0;
+}
+