Index: /trunk/psModules/src/config/pmConfig.c
===================================================================
--- /trunk/psModules/src/config/pmConfig.c	(revision 11244)
+++ /trunk/psModules/src/config/pmConfig.c	(revision 11245)
@@ -4,6 +4,6 @@
  *  @author EAM (IfA)
  *
- *  @version $Revision: 1.72 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-01-11 22:55:36 $
+ *  @version $Revision: 1.73 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-01-23 03:19:35 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -676,5 +676,5 @@
 
 // XXX aren't these (return false) below errors: call psError?
-bool pmConfigValidateCameraFormat(const psMetadata *cameraFormat, const psMetadata *header)
+bool pmConfigValidateCameraFormat(bool *valid, const psMetadata *cameraFormat, const psMetadata *header)
 {
     PS_ASSERT_PTR_NON_NULL(cameraFormat, false);
@@ -683,7 +683,9 @@
     // Read the rule for that camera format
     bool mdStatus = true;
+
     psMetadata *rule = psMetadataLookupMetadata(&mdStatus, cameraFormat, "RULE");
     if (! mdStatus || ! rule) {
         psError(PS_ERR_UNKNOWN, false, "Unable to read rule for camera.");
+        *valid = false;
         return false;
     }
@@ -692,19 +694,19 @@
     psMetadataIterator *ruleIter = psMetadataIteratorAlloc(rule, PS_LIST_HEAD, NULL); // Rule iterator
     psMetadataItem *ruleItem = NULL;    // Item from the metadata
-    while ((ruleItem = psMetadataGetAndIncrement(ruleIter))) {
+
+    *valid = true;
+    while (*valid && (ruleItem = psMetadataGetAndIncrement(ruleIter))) {
         // Check for the existence of the rule
         psMetadataItem *headerItem = psMetadataLookup(header, ruleItem->name);
         if (! headerItem) {
-            // doesn't match, but not an error
+            // rule item not found in header
             psTrace("psModules.config", 5, "Can't find %s", ruleItem->name);
-            psFree(ruleIter);
-            return false;
+            *valid = false;
         }
 
         // Check to see if the rule works
-        if (! psMetadataItemCompare(headerItem, ruleItem)) {
+        if (headerItem && !psMetadataItemCompare(headerItem, ruleItem)) {
             psTrace("psModules.config", 5, "%s doesn't match.", ruleItem->name);
-            psFree(ruleIter);
-            return false;
+            *valid = false;
         }
     } // Iterating through the RULEs
@@ -713,5 +715,4 @@
     return true;
 }
-
 
 // Given a camera and a header, see if any of the camera formats match the header
@@ -750,5 +751,13 @@
         psMetadata *testFormat = formatsItem->data.md; // Format to test against
 
-        if (pmConfigValidateCameraFormat(testFormat, header)) {
+        psTrace("psModules.config", 5, "trying format %s", formatsItem->name);
+
+        bool valid = false;
+        if (!pmConfigValidateCameraFormat(&valid, testFormat, header)) {
+            psError (PS_ERR_UNKNOWN, false, "Error in config scripts for camera %s, format %s\n",
+                     cameraName, formatsItem->name);
+            return false;
+        }
+        if (valid) {
             if (!*format) {
                 psLogMsg("psModules.config", PS_LOG_INFO, "Camera %s, format %s matches header.\n",
@@ -762,16 +771,7 @@
                          cameraName, formatsItem->name);
             }
-        } else {
-            psErr *error = psErrorLast();
-            if (error->code != PS_ERR_NONE) {
-                psError (PS_ERR_UNKNOWN, false, "Error in config scripts for camera %s, format %s\n",\
-                         cameraName, formatsItem->name);
-                return false;
-            }
-            psFree(error);
         }
     }
     psFree(formatsIter);
-
     return result;
 }
Index: /trunk/psModules/src/config/pmConfig.h
===================================================================
--- /trunk/psModules/src/config/pmConfig.h	(revision 11244)
+++ /trunk/psModules/src/config/pmConfig.h	(revision 11245)
@@ -9,6 +9,6 @@
 /// @author Eugene Magnier, IfA
 ///
-/// @version $Revision: 1.24 $ $Name: not supported by cvs2svn $
-/// @date $Date: 2007-01-11 22:54:56 $
+/// @version $Revision: 1.25 $ $Name: not supported by cvs2svn $
+/// @date $Date: 2007-01-23 03:19:43 $
 ///
 /// Copyright 2005-2006 Institute for Astronomy, University of Hawaii
@@ -97,6 +97,7 @@
 ///
 /// Given a FITS header (the PHU header), check it against the RULE metadata contained within the camera
-/// format; return true if it matches.
-bool pmConfigValidateCameraFormat(const psMetadata *cameraFormat, ///< Camera format containing the RULE
+/// format; return found = true if it matches. return false on serious errors
+bool pmConfigValidateCameraFormat(bool *valid,
+                                  const psMetadata *cameraFormat, ///< Camera format containing the RULE
                                   const psMetadata *header // FITS header for the PHU
                                  );
