Index: trunk/psLib/src/astro/psTime.c
===================================================================
--- trunk/psLib/src/astro/psTime.c	(revision 2318)
+++ trunk/psLib/src/astro/psTime.c	(revision 2365)
@@ -10,6 +10,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.42 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-11-10 18:27:03 $
+ *  @version $Revision: 1.43 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-11-15 20:15:30 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -209,13 +209,4 @@
     }
 
-    // Get path to time data files
-    metadataItem = psMetadataLookup(timeMetadata, "psLib.time.tables.dir");
-    if(metadataItem == NULL) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_LOOKUP_METADATA_FAILED,
-                "psLib.time.tables.dir");
-        return false;
-    }
-    tableDir = psStringCopy(metadataItem->data.V);
-
     // Get number of tables
     metadataItem = psMetadataLookup(timeMetadata, "psLib.time.tables.n");
@@ -227,13 +218,4 @@
     numTables = (psS32)metadataItem->data.S32;
 
-    // Table file names
-    metadataItem = psMetadataLookup(timeMetadata, "psLib.time.tables.files");
-    if(metadataItem == NULL) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_LOOKUP_METADATA_FAILED,
-                "psLib.time.tables.files");
-        return false;
-    }
-    tableNames = psStringCopy(metadataItem->data.V);
-
     // Get lower range of tables
     metadataItem = psMetadataLookup(timeMetadata, "psLib.time.tables.from");
@@ -245,4 +227,6 @@
     tablesFrom = psVectorCopy(tablesFrom, metadataItem->data.V, PS_TYPE_F64);
     if(tablesFrom->n != numTables) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_BAD_VECTOR, tablesFrom->n, numTables);
+        psFree(tablesFrom);
         return false;
     }
@@ -258,19 +242,50 @@
     if(tablesTo->n != numTables) {
         psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_BAD_VECTOR, tablesTo->n, numTables);
+        psFree(tablesFrom);
+        psFree(tablesTo);
         return false;
     }
+
+    // Get path to time data files
+    metadataItem = psMetadataLookup(timeMetadata, "psLib.time.tables.dir");
+    if(metadataItem == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_LOOKUP_METADATA_FAILED,
+                "psLib.time.tables.dir");
+        psFree(tablesFrom);
+        psFree(tablesTo);
+        return false;
+    }
+    tableDir = psStringCopy(metadataItem->data.V);
+
+    // Table file names
+    metadataItem = psMetadataLookup(timeMetadata, "psLib.time.tables.files");
+    if(metadataItem == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_LOOKUP_METADATA_FAILED,
+                "psLib.time.tables.files");
+
+        psFree(tablesFrom);
+        psFree(tablesTo);
+        psFree(tableDir);
+        return false;
+    }
+    tableNames = psStringCopy(metadataItem->data.V);
 
     // Read time tables
     namesPtr = tableNames;
     while((tableName=getToken(&namesPtr, " ", &status)) != NULL) {
-        fullTableName = (char*)psAlloc(strlen(tableDir)+strlen(tableName)+1+1); // Add one for last dir "/"
-        fullTableName[0]='\0'; // Old strings may come back from psAlloc, so set init pos to EOL
+
+        // Form path with table name, adding one to length for last '/' that may not occur in string in cong file
+        fullTableName = (char*)psAlloc(strlen(tableDir)+strlen(tableName)+1+1);
+
+        // Old strings may come back from psAlloc(), so set initial position to EOL
+        fullTableName[0]='\0';
         strcat(fullTableName, tableDir);
         strcat(fullTableName, "/");
         strcat(fullTableName, tableName);
 
+        // Create and read table
         if(i < numTables) {
             table = psLookupTableAlloc(fullTableName, tablesFrom->data.F64[i], tablesTo->data.F64[i]);
-            psLookupTableRead(table);
+            table = psLookupTableRead(table);
         } else {
             psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_BAD_TABLE_COUNT, i+1, numTables);
@@ -295,6 +310,6 @@
     }
 
-    if(numTables > i+1) {
-        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_BAD_TABLE_COUNT, i+1, numTables);
+    if(numTables != i) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psTime_BAD_TABLE_COUNT, i, numTables);
     }
 
@@ -309,13 +324,10 @@
 bool psTimeFinalize(void)
 {
-    bool result = false;
-
-
     if(timeMetadata != NULL) {
         psFree(timeMetadata);
-        result = true;
-    }
-
-    return result;
+        timeMetadata = NULL;
+    }
+
+    return true;
 }
 
