Index: /branches/eam_branches/ipp-20150625/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/libdvo/include/dvo.h	(revision 38751)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/libdvo/include/dvo.h	(revision 38752)
@@ -970,6 +970,6 @@
 void dvo_catalog_test (Catalog *catalog, int halt);
 
-int dvo_catalog_backup (Catalog *catalog, int primary);
-int dvo_catalog_unlink_backup (Catalog *catalog, int primary);
+int dvo_catalog_backup (Catalog *catalog, char *suffix, int primary);
+int dvo_catalog_unlink_backup (Catalog *catalog, char *suffix, int primary);
 
 /* catmode-specific APIs */
Index: /branches/eam_branches/ipp-20150625/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/libdvo/src/dvo_catalog.c	(revision 38751)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/libdvo/src/dvo_catalog.c	(revision 38752)
@@ -1045,5 +1045,5 @@
 
 // make a backup of this catalog (including the measure, secfilt, and missing tables as needed)
-int dvo_catalog_backup (Catalog *catalog, int primary) {
+int dvo_catalog_backup (Catalog *catalog, char *suffix, int primary) {
 
   // skip empty cpt files
@@ -1053,5 +1053,5 @@
 
   char tmpfilename[DVO_MAX_PATH];
-  int status = snprintf (tmpfilename, DVO_MAX_PATH, "%s~", catalog->filename);
+  int status = snprintf (tmpfilename, DVO_MAX_PATH, "%s%s", catalog->filename, suffix);
   if (status >= DVO_MAX_PATH) {
     fprintf (stderr, "path name too long: %s\n", catalog->filename);
@@ -1068,4 +1068,18 @@
   }
 
+  // play it safe: do not overwrite an existing backup file
+  struct stat fileStats;
+  status = stat (tmpfilename, &fileStats);
+  if (!status) {
+    fprintf (stderr, "ERROR: backup file %s already exists, exiting\n", tmpfilename);
+    return FALSE;
+  }
+  
+  // some error accessing the file.  there is only one acceptable error: file not found
+  if (status && (errno != ENOENT)) {
+    perror ("problem with output target");
+    return FALSE;
+  }
+
   status = rename (catalog->filename, tmpfilename);
   if (status) {
@@ -1086,15 +1100,15 @@
   if (catalog[0].catmode == DVO_MODE_SPLIT) {
     if (catalog[0].measure_catalog != NULL) {
-      if (!dvo_catalog_backup (catalog[0].measure_catalog, FALSE)) {
+      if (!dvo_catalog_backup (catalog[0].measure_catalog, suffix, FALSE)) {
 	return FALSE;
       }
     }
     if (catalog[0].missing_catalog != NULL) {
-      if (!dvo_catalog_backup (catalog[0].missing_catalog, FALSE)) {
+      if (!dvo_catalog_backup (catalog[0].missing_catalog, suffix, FALSE)) {
 	return FALSE;
       }
     }
     if (catalog[0].secfilt_catalog != NULL) {
-      if (!dvo_catalog_backup (catalog[0].secfilt_catalog, FALSE)) {
+      if (!dvo_catalog_backup (catalog[0].secfilt_catalog, suffix, FALSE)) {
 	return FALSE;
       }
@@ -1105,5 +1119,5 @@
 	status = dvo_catalog_lock (catalog[0].lensing_catalog, lockmode);
       } else {
-	if (!dvo_catalog_backup (catalog[0].lensing_catalog, FALSE)) {
+	if (!dvo_catalog_backup (catalog[0].lensing_catalog, suffix, FALSE)) {
 	  return FALSE;
 	}
@@ -1115,5 +1129,5 @@
 	status = dvo_catalog_lock (catalog[0].lensobj_catalog, lockmode);
       } else {
-	if (!dvo_catalog_backup (catalog[0].lensobj_catalog, FALSE)) {
+	if (!dvo_catalog_backup (catalog[0].lensobj_catalog, suffix, FALSE)) {
 	  return FALSE;
 	}
@@ -1125,5 +1139,5 @@
 	status = dvo_catalog_lock (catalog[0].starpar_catalog, lockmode);
       } else {
-	if (!dvo_catalog_backup (catalog[0].starpar_catalog, FALSE)) {
+	if (!dvo_catalog_backup (catalog[0].starpar_catalog, suffix, FALSE)) {
 	  return FALSE;
 	}
@@ -1135,5 +1149,5 @@
 	status = dvo_catalog_lock (catalog[0].galphot_catalog, lockmode);
       } else {
-	if (!dvo_catalog_backup (catalog[0].galphot_catalog, FALSE)) {
+	if (!dvo_catalog_backup (catalog[0].galphot_catalog, suffix, FALSE)) {
 	  return FALSE;
 	}
@@ -1145,5 +1159,5 @@
 
 // make a backup of this catalog (including the measure, secfilt, and missing tables as needed)
-int dvo_catalog_unlink_backup (Catalog *catalog, int primary) {
+int dvo_catalog_unlink_backup (Catalog *catalog, char *suffix, int primary) {
 
   if (primary && !catalog->Naverage_disk) {
@@ -1153,5 +1167,5 @@
 
   char tmpfilename[DVO_MAX_PATH];
-  int status = snprintf (tmpfilename, DVO_MAX_PATH, "%s~", catalog->filename);
+  int status = snprintf (tmpfilename, DVO_MAX_PATH, "%s%s", catalog->filename, suffix);
   if (status >= DVO_MAX_PATH) {
     fprintf (stderr, "path name too long: %s\n", catalog->filename);
@@ -1169,35 +1183,35 @@
   if (catalog[0].catmode == DVO_MODE_SPLIT) {
     if (catalog[0].measure_catalog != NULL) {
-      if (!dvo_catalog_unlink_backup (catalog[0].measure_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].measure_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
     }
     if (catalog[0].missing_catalog != NULL) {
-      if (!dvo_catalog_unlink_backup (catalog[0].missing_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].missing_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
     }
     if (catalog[0].secfilt_catalog != NULL) {
-      if (!dvo_catalog_unlink_backup (catalog[0].secfilt_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].secfilt_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
     }
     if ((catalog[0].lensing_catalog != NULL) && (catalog[0].Nlensing_disk > 0)) {
-      if (!dvo_catalog_unlink_backup (catalog[0].lensing_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].lensing_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
     }
     if ((catalog[0].lensobj_catalog != NULL) && (catalog[0].Nlensobj_disk > 0)) {
-      if (!dvo_catalog_unlink_backup (catalog[0].lensobj_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].lensobj_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
     }
     if ((catalog[0].starpar_catalog != NULL) && (catalog[0].Nstarpar_disk > 0)) {
-      if (!dvo_catalog_unlink_backup (catalog[0].starpar_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].starpar_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
     }
     if ((catalog[0].galphot_catalog != NULL) && (catalog[0].Ngalphot_disk > 0)) {
-      if (!dvo_catalog_unlink_backup (catalog[0].galphot_catalog, FALSE)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].galphot_catalog, suffix, FALSE)) {
 	outStatus = FALSE;
       }
