+/*!
+ * Return CNID database version number
+ * @returns -1 on error, version number otherwise
+ */
+int dbif_getversion(DBD *dbd)
+{
+ DBT key, data;
+ uint32_t version;
+ int ret;
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ key.data = ROOTINFO_KEY;
+ key.size = ROOTINFO_KEYLEN;
+
+ switch (dbif_get(dbd, DBIF_CNID, &key, &data, 0)) {
+ case 1:
+ memcpy(&version, (char *)data.data + CNID_DID_OFS, sizeof(version));
+ version = ntohl(version);
+ LOG(log_debug, logtype_cnid, "CNID database version %u", version);
+ ret = version;
+ break;
+ default:
+ ret = -1;
+ break;
+ }
+ return ret;
+}
+
+/*!
+ * Return CNID database version number
+ * @returns -1 on error, version number otherwise
+ */
+int dbif_setversion(DBD *dbd, int version)
+{
+ DBT key, data;
+ uint32_t v;
+
+ v = version;
+ v = htonl(v);
+
+ memset(&key, 0, sizeof(key));
+ memset(&data, 0, sizeof(data));
+ key.data = ROOTINFO_KEY;
+ key.size = ROOTINFO_KEYLEN;
+
+ switch (dbif_get(dbd, DBIF_CNID, &key, &data, 0)) {
+ case 1:
+ break;
+ default:
+ return -1;
+ }
+
+ memcpy((char *)data.data + CNID_DID_OFS, &v, sizeof(v));
+ data.size = ROOTINFO_DATALEN;
+ if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0)
+ return -1;
+
+ return 0;
+}
+