+// convert users-by-number records
+void convert_usersbynumber(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
+
+ // key is a long
+ // and remember ... "long" is int32_t on the source system
+ int32_t in_usernum;
+ long out_usernum;
+ memcpy(&in_usernum, in_key->data, sizeof(in_usernum));
+ out_usernum = (long) in_usernum;
+
+ if (in_key->size != 4) {
+ printf("\033[31m\033[1m *** SOURCE DATABASE IS NOT 32-BIT *** ABORTING *** \033[0m\n");
+ abort();
+ }
+
+ out_key->size = sizeof(out_usernum);
+ out_key->data = realloc(out_key->data, out_key->size);
+ memcpy(out_key->data, &out_usernum, sizeof(out_usernum));
+
+ // value is a string
+ out_data->size = in_data->size;
+ out_data->data = realloc(out_data->data, out_data->size);
+ memcpy(out_data->data, in_data->data, in_data->size);
+
+ printf("usersbynumber: %ld --> %s\n", out_usernum, (char *)out_data->data);
+}
+
+
+// convert function for a config record
+void convert_config(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
+
+ // the key is a string
+ out_key->size = in_key->size;
+ out_key->data = realloc(out_key->data, out_key->size + 1);
+ memcpy(out_key->data, in_key->data, in_key->size);
+ char *k = (char *)out_key->data;
+ k[out_key->size] = 0;
+
+ // the data is a pair of strings
+ out_data->size = in_data->size;
+ out_data->data = realloc(out_data->data, out_data->size + 1);
+ memcpy(out_data->data, in_data->data, in_data->size);
+ char *d = (char *)out_data->data;
+ d[out_data->size] = 0;
+
+ // please excuse my friend, he isn't null terminated
+ printf("\033[32m\033[1mConfig entry: %s -> %s\033[0m\n", (char *)out_key->data, (char *)out_data->data+strlen(out_data->data)+1);
+}
+
+
+// For obsolete databases, zero all the output
+void zero_function(int which_cdb, DBT *in_key, DBT *in_data, DBT *out_key, DBT *out_data) {
+ out_key->size = 0;
+ out_data->size = 0;
+}
+
+