+ /* this is the calling mode where we do the processing */
+ int i;
+ for (i=0; i<num_m; ++i) {
+ CtdlSetEmailAddressesForUser(m[i].name, m[i].emails);
+ }
+ free(m);
+ num_m = 0;
+ alloc_m = 0;
+ return;
+}
+
+
+/*
+ * If our system still has a "refcount_adjustments.dat" sitting around from an old version, ingest it now.
+ */
+int ProcessOldStyleAdjRefCountQueue(void)
+{
+ int r;
+ FILE *fp;
+ struct arcq arcq_rec;
+ int num_records_processed = 0;
+
+ fp = fopen(file_arcq, "rb");
+ if (fp == NULL) {
+ return(num_records_processed);
+ }
+
+ syslog(LOG_INFO, "msgbase: ingesting %s", file_arcq);
+
+ while (fread(&arcq_rec, sizeof(struct arcq), 1, fp) == 1) {
+ AdjRefCount(arcq_rec.arcq_msgnum, arcq_rec.arcq_delta);
+ ++num_records_processed;
+ }
+
+ fclose(fp);
+ r = unlink(file_arcq);
+ if (r != 0) {
+ syslog(LOG_ERR, "%s: %m", file_arcq);
+ }
+
+ return(num_records_processed);
+}
+
+
+/*
+ * Prior to version 912 we kept a user's various Internet email addresses in their vCards.
+ * This function moves them over to the user record, which is where we keep them now.
+ */
+void move_inet_addrs_from_vcards_to_user_records(void)
+{
+ ForEachUser(miafvtur_backend, NULL);
+ miafvtur_backend(NULL, NULL);
+ CtdlRebuildDirectoryIndex();
+}
+
+
+/*
+ * Based on the server version number reported by the existing database,
+ * run in-place data format upgrades until everything is up to date.
+ */
+void pre_startup_upgrades(void) {
+
+ oldver = CtdlGetConfigInt("MM_hosted_upgrade_level");
+ syslog(LOG_INFO, "Existing database version on disk is %d", oldver);