Index: /trunk/psLib/src/astro/psTime.c
===================================================================
--- /trunk/psLib/src/astro/psTime.c	(revision 9804)
+++ /trunk/psLib/src/astro/psTime.c	(revision 9805)
@@ -10,6 +10,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.99 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-10-26 03:47:49 $
+ *  @version $Revision: 1.100 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-10-31 05:06:19 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -1865,4 +1865,9 @@
     PS_ASSERT_PTR_NON_NULL(inTime, NULL);
     psTime *outTime = psTimeAlloc(inTime->type);
+    if (outTime == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
+                "Invalid type specified in psTimeCopy.  %x", inTime->type);
+        return NULL;
+    }
     //    *outTime = *inTime;
     outTime->sec = inTime->sec;
Index: /trunk/psLib/src/types/psMetadataConfig.c
===================================================================
--- /trunk/psLib/src/types/psMetadataConfig.c	(revision 9804)
+++ /trunk/psLib/src/types/psMetadataConfig.c	(revision 9805)
@@ -10,6 +10,6 @@
 *  @author Eric Van Alst, MHPCC
 *
-*  @version $Revision: 1.103 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2006-10-31 03:40:01 $
+*  @version $Revision: 1.104 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2006-10-31 05:06:19 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -27,17 +27,4 @@
 #include "psMetadataConfig.h"
 #include "psAssert.h"
-//#include <sys/types.h>
-//#include <sys/stat.h>
-//#include <inttypes.h>
-//#include "psHash.h"
-//#include "psMetadata.h"
-//#include "psAbort.h"
-//#include "psType.h"
-
-//#include "psMemory.h"
-//#include "psError.h"
-//#include "psString.h"
-//#include "psList.h"
-//#include "psVector.h"
 
 
Index: /trunk/psLib/test/types/Makefile.am
===================================================================
--- /trunk/psLib/test/types/Makefile.am	(revision 9804)
+++ /trunk/psLib/test/types/Makefile.am	(revision 9805)
@@ -31,5 +31,6 @@
 	tap_psLookupTable_all \
 	tap_psMetadataConfig_output \
-	tap_psMetadataConfig_input
+	tap_psMetadataConfig_input \
+	tap_psMetadataConfig_format
 
 if BUILD_TESTS
Index: /trunk/psLib/test/types/execute_tap
===================================================================
--- /trunk/psLib/test/types/execute_tap	(revision 9804)
+++ /trunk/psLib/test/types/execute_tap	(revision 9805)
@@ -20,2 +20,3 @@
 ./tap_psMetadataConfig_output
 ./tap_psMetadataConfig_input
+./tap_psMetadataConfig_format
Index: /trunk/psLib/test/types/tap_psMetadataConfig_input.c
===================================================================
--- /trunk/psLib/test/types/tap_psMetadataConfig_input.c	(revision 9804)
+++ /trunk/psLib/test/types/tap_psMetadataConfig_input.c	(revision 9805)
@@ -25,5 +25,5 @@
 int main(void)
 {
-    plan_tests(10);
+    plan_tests(22);
 
     diag("Tests for psMetadataConfig Input Functions");
@@ -73,17 +73,17 @@
     //Return true for valid inputs
     {
-        skip_start(  !psMetadataConfigWrite(md, "mdcfg.wrt"), 2,
-                     "Skipping 2 tests because psMetadataConfigWrite failed");
-        out = psMetadataConfigRead(out, &nfail, "mdcfg.wrt", false);
-        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
-        ok( out != NULL && nfail == 0,
+        out = psMetadataConfigRead(out, &nfail, "metaconf.in", false);
+        //        psMetadataPrint(NULL, out, 2);
+        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
+        ok( out != NULL,
             "psMetadataConfigRead:           return correct metadata for valid inputs.");
+        if (nfail != 0)
+            printf("\n nfail = %d   list->n = %ld\n", nfail, md->list->n);
         skip_start(  tempItem == NULL, 1,
                      "Skipping 1 tests because metadata container is empty!");
-        ok_str( tempItem->name, "new_S32",
+        ok_str( tempItem->name, "item1",
                 "psMetadataConfigRead:           return correct metadataItem from "
                 "returned metadata.");
         skip_end();
-        skip_end();
     }
 
@@ -91,6 +91,4 @@
     {
         psFree(out);
-        remove
-            ("mdcfg.wrt");
         psFree(md);
         checkMem();
@@ -103,8 +101,20 @@
     psMetadata *out = NULL;
     unsigned int nfail = 0;
-    char str1[30];
+    char str1[70];
+    char str2[70];
+    char str3[70];
+    char str4[70];
+    char str5[70];
+    char str6[70];
+    char str7[70];
+    char str8[70];
     strcpy(str1, "-10.05    2        4");
-    char str2[30];
-    strcpy(str2, "\nnew S32       666\n");
+    strcpy(str2, "new S32       666");
+    strcpy(str3, "item4            F64       6.28");
+    strcpy(str4, "item8            S8        3\nitem8            S8        5");
+    strcpy(str5, "item1            BOOL      T");
+    strcpy(str6, "item6            S16");
+    strcpy(str7, "@vector6 U8 1 2 3 4 5   # I am a vector");
+    strcpy(str8, "time01           TAI       1970-01-01T00:16:39Z  # I am time");
 
     //Return NULL for NULL string input
@@ -114,14 +124,4 @@
             "psMetadataConfigParse:          return NULL for NULL string input.");
     }
-    //Return correct metadata for correct string input
-    {
-        psFree(out);
-        out = NULL;
-        out = psMetadataConfigParse(out, NULL, str2, false);
-        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
-        ok( out != NULL && tempItem != NULL,
-            "psMetadataConfigParse:          return correct metadata for valid "
-            "string input.");
-    }
     //Return empty metadata for incorrect string input
     {
@@ -131,48 +131,84 @@
         psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
         ok( out != NULL && tempItem == NULL,
-            "psMetadataConfigParse:          return correct metadata for valid "
+            "psMetadataConfigParse:          return empty metadata for invalid "
             "string input.");
         if (tempItem != NULL)
             printf("\n\n name=%s\n", tempItem->name);
     }
-
-
-    /*    FILE *openfile;
-    openfile = fopen("mdcfg.prt", "w+");
-    FILE *nofile = NULL;
-    psMetadata *md = NULL;
-    md = psMetadataAlloc();
-
-    //psMetadataConfigParse(psMetadata* md,unsigned int *nFail,const char *str,bool overwrite)
-
-    //Return false for NULL metadata input
-    {
-        ok( !psMetadataConfigPrint(openfile, NULL),
-             "psMetadataConfigPrint:           return false for NULL metadata input.");
-    }
-    //Return false for empty metadata input
-    {
-        ok( !psMetadataConfigPrint(openfile, md),
-             "psMetadataConfigPrint:           return false for empty metadata input.");
-    }
-    //Return false for NULL file input
-    psMetadataAddS32(md, PS_LIST_HEAD, "new S32", 0, "", 666);
-    {
-        ok( !psMetadataConfigPrint(nofile, md),
-             "psMetadataConfigPrint:           return false for NULL FILE* input.");
-    }
-    //Return false for read-only file input
-    nofile = fopen("mdcfg.prt", "r");
-    {
-        ok( !psMetadataConfigPrint(nofile, md),
-             "psMetadataConfigPrint:           return false for read-only FILE* input.");
-    }
-    //Return true for valid inputs
-    {
-        ok( psMetadataConfigPrint(openfile, md),
-            "psMetadataConfigPrint:           return true for valid inputs.");
-    }
-
-    */
+    //Return correct metadata for correct string input - S32
+    {
+        psFree(out);
+        out = NULL;
+        out = psMetadataConfigParse(out, NULL, str2, false);
+        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
+        ok( out != NULL && tempItem != NULL,
+            "psMetadataConfigParse:          return correct metadata for valid "
+            "string input. (S32)");
+        skip_start(  tempItem == NULL, 2,
+                     "Skipping 1 tests because metadata container is empty!");
+        ok( tempItem->type == PS_TYPE_S32 && tempItem->data.S32 == 666,
+            "psMetadataConfigParse:         return correct metadataItem data (S32)");
+        ok_str( tempItem->name, "new",
+                "psMetadataConfigParse:         return correct metadataItem name (S32)");
+        skip_end();
+    }
+    //Return correct metadata for correct string input - F64
+    {
+        psFree(out);
+        out = NULL;
+        out = psMetadataConfigParse(out, NULL, str3, false);
+        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
+        ok( out != NULL && tempItem != NULL,
+            "psMetadataConfigParse:         return correct metadata for valid "
+            "string input. (F64)");
+        skip_start(  tempItem == NULL, 2,
+                     "Skipping 1 tests because metadata container is empty!");
+        ok( tempItem->type == PS_DATA_F64,
+            "psMetadataConfigParse:         return correct metadataItem data (F64) "
+            "from outputted metadata.");
+        ok_float(6.28, tempItem->data.F64,
+                 "psMetadataConfigParse:         return correct metadataItem data (F64) "
+                 "value.");
+        ok_str( tempItem->name, "item4",
+                "psMetadataConfigParse:         return correct metadataItem name (F64)");
+        skip_end();
+    }
+    //Return correct metadata for string with duplicate entry - S8
+    {
+        psFree(out);
+        out = NULL;
+        out = psMetadataConfigParse(out, &nfail, str4, false);
+        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
+        ok( out != NULL && tempItem != NULL && out->list->n == 1  && nfail == 1,
+            "psMetadataConfigParse:         return correct metadata for string "
+            "with duplicate entry. (S8)");
+        skip_start(  tempItem == NULL, 2,
+                     "Skipping 1 tests because metadata container is empty!");
+        ok( tempItem->type == PS_TYPE_S8 && tempItem->data.S8 == 3,
+            "psMetadataConfigParse:         return correct metadataItem data (S8)");
+        ok_str( tempItem->name, "item8",
+                "psMetadataConfigParse:         return correct metadataItem name (S8)");
+        skip_end();
+    }
+    //Return correct metadata for correct string input - Vector
+    {
+        psFree(out);
+        out = NULL;
+        out = psMetadataConfigParse(out, NULL, str7, false);
+        psMetadataItem *tempItem = psMetadataGet(out, PS_LIST_HEAD);
+        ok( out != NULL && tempItem != NULL,
+            "psMetadataConfigParse:         return correct metadata for valid "
+            "string input. (Vector)");
+        skip_start(  tempItem == NULL, 2,
+                     "Skipping 1 tests because metadata container is empty!");
+        ok( tempItem->type == PS_DATA_VECTOR
+            && ((psVector*)(tempItem->data.V))->data.U8[0] == 1,
+            "psMetadataConfigParse:         return correct metadataItem data (Vector) ");
+        ok_str( tempItem->name, "vector6",
+                "psMetadataConfigParse:         return correct metadataItem name (Vector)");
+        skip_end();
+    }
+
+
     //Check for Memory leaks
     {
Index: /trunk/psLib/test/types/tap_psMetadataConfig_output.c
===================================================================
--- /trunk/psLib/test/types/tap_psMetadataConfig_output.c	(revision 9804)
+++ /trunk/psLib/test/types/tap_psMetadataConfig_output.c	(revision 9805)
@@ -18,5 +18,5 @@
 static void testMetaConfigWrite(void);
 static void testMetaConfigPrint(void);
-
+static psMetadata *setupMeta(void);
 
 int main(void)
@@ -32,4 +32,122 @@
 }
 
+static psMetadata *setupMeta(void)
+{
+    psMetadata *md = NULL;
+    psVector *vec1 = NULL;
+    psVector *vec2 = NULL;
+    psVector *vec3 = NULL;
+    psVector *vec4 = NULL;
+    psVector *vec5 = NULL;
+    psVector *vec6 = NULL;
+    psVector *vec7 = NULL;
+    psVector *vec8 = NULL;
+    psVector *vec9 = NULL;
+    psVector *vec10 = NULL;
+    psMetadata *newMD = NULL;
+    psTime *time1;
+    psTime *time2;
+    psTime *time3;
+    psTime *time4;
+    int i = 0;
+    md = psMetadataAlloc();
+    newMD = psMetadataAlloc();
+    vec1 = psVectorAlloc(60, PS_DATA_S8);
+    vec2 = psVectorAlloc(60, PS_DATA_S16);
+    vec3 = psVectorAlloc(60, PS_DATA_S32);
+    vec4 = psVectorAlloc(60, PS_DATA_S64);
+    vec5 = psVectorAlloc(60, PS_DATA_U8);
+    vec6 = psVectorAlloc(60, PS_DATA_U16);
+    vec7 = psVectorAlloc(60, PS_DATA_U32);
+    vec8 = psVectorAlloc(60, PS_DATA_U64);
+    vec9 = psVectorAlloc(60, PS_DATA_F32);
+    vec10 = psVectorAlloc(60, PS_DATA_F64);
+    time1 = psTimeAlloc(PS_TIME_TAI);
+    time2 = psTimeAlloc(PS_TIME_TT);
+    time3 = psTimeAlloc(PS_TIME_UTC);
+    time4 = psTimeAlloc(PS_TIME_UT1);
+    for (i = 0; i < 5; i++) {
+        vec1->data.S8[i] = i+1;
+        vec2->data.S16[i] = i+1;
+        vec3->data.S32[i] = i+1;
+        vec4->data.S64[i] = i+1;
+        vec5->data.U8[i] = i+1;
+        vec6->data.U16[i] = i+1;
+        vec7->data.U32[i] = i+1;
+        vec8->data.U64[i] = i+1;
+        vec9->data.F32[i] = i+1.0;
+        vec10->data.F64[i] = i+1.0;
+    }
+    vec1->n = 5;
+    vec2->n = 5;
+    vec3->n = 5;
+    vec4->n = 5;
+    vec5->n = 5;
+    vec6->n = 5;
+    vec7->n = 5;
+    vec8->n = 5;
+    vec9->n = 5;
+    vec10->n = 5;
+    time1->sec = 1000;
+    time1->nsec = 25;
+    time1->leapsecond = true;
+    psMetadataAddBool(md, PS_LIST_TAIL, "item1-1", 0, "I am a boolean", true);
+    psMetadataAddBool(md, PS_LIST_TAIL, "item1-2", 0, "I am a boolean2", false);
+    psMetadataAddS8(md, PS_LIST_TAIL, "item2-8", 0, "", 8);
+    psMetadataAddS16(md, PS_LIST_TAIL, "item2-16", 0, "", 16);
+    psMetadataAddS32(md, PS_LIST_TAIL, "item2-32", 0, "", 32);
+    psMetadataAddS64(md, PS_LIST_TAIL, "item2-64", 0, "", 64);
+    psMetadataAddU8(md, PS_LIST_TAIL, "item3-8", 0, "", 8);
+    psMetadataAddU16(md, PS_LIST_TAIL, "item3-16", 0, "", 16);
+    psMetadataAddU32(md, PS_LIST_TAIL, "item3-32", 0, "", 32);
+    psMetadataAddU64(md, PS_LIST_TAIL, "item3-64", 0, "", 64);
+    psMetadataAddF32(md, PS_LIST_TAIL, "item4", 0, NULL, 3.14);
+    psMetadataAddF64(md, PS_LIST_TAIL, "item5", 0, "", 6.28);
+    psMetadataAddStr(md, PS_LIST_TAIL, "item6", 0, "I am a string", "GNIRTS");
+    psMetadataAddStr(md, PS_LIST_TAIL, "item6-2", 0, "", "");
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorS8", 0, "I am a vector", vec1);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorS16", 0, "", vec2);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorS32", 0, "", vec3);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorS64", 0, "", vec4);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorU8", 0, "", vec5);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorU16", 0, "I am a vector", vec6);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorU32", 0, "", vec7);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorU64", 0, "", vec8);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorF32", 0, "", vec9);
+    psMetadataAddVector(md, PS_LIST_TAIL, "vectorF64", 0, "", vec10);
+    psMetadataAddTime(md, PS_LIST_TAIL, "time01", 0, "I am time1", time1);
+    psMetadataAddTime(md, PS_LIST_TAIL, "time02", 0, "I am time2", time2);
+    psMetadataAddTime(md, PS_LIST_TAIL, "time03", 0, "I am time3", time3);
+    psMetadataAddTime(md, PS_LIST_TAIL, "time04", 0, "I am time4", time4);
+
+    psMetadataAddS32(newMD, PS_LIST_TAIL, "ITEM01", 0, NULL, 666);
+    psMetadata *newestMD = NULL;
+    newestMD = psMetadataAlloc();
+    psMetadataAddVector(newestMD, PS_LIST_TAIL, "VECTORNEW", 0, "Newest VECTOR", vec1);
+    psMetadataAddStr(newestMD, PS_LIST_TAIL, "cell", 0, "I am a p-Star", "pStArRs");
+    psMetadataAddMetadata(newMD, PS_LIST_TAIL, "META_NEW", 0, "", newestMD);
+    psMetadataAddF32(newMD, PS_LIST_TAIL, "ITEM02", 0, "I AM FLOAT", 666.6);
+    psMetadataAddF64(newMD, PS_LIST_TAIL, "ITEM03", 0, "I AM DOUBLE", 666.666);
+
+    psMetadataAddMetadata(md, PS_LIST_TAIL, "metadata7", 0, "I am a metadata", newMD);
+    psFree(time1);
+    psFree(time2);
+    psFree(time3);
+    psFree(time4);
+    psFree(newestMD);
+    psFree(vec1);
+    psFree(vec2);
+    psFree(vec3);
+    psFree(vec4);
+    psFree(vec5);
+    psFree(vec6);
+    psFree(vec7);
+    psFree(vec8);
+    psFree(vec9);
+    psFree(vec10);
+    psFree(newMD);
+    return md;
+}
+
 void testMetaConfigWrite(void)
 {
@@ -59,5 +177,7 @@
             "psMetadataConfigWrite:           return false for empty metadata input.");
     }
-    psMetadataAddS32(md, PS_LIST_HEAD, "new S32", 0, "", 666);
+    //    psMetadataAddS32(md, PS_LIST_HEAD, "new S32", 0, "", 666);
+    psFree(md);
+    md = setupMeta();
     //Return true for valid inputs
     {
@@ -68,6 +188,5 @@
     //Check for Memory leaks
     {
-        remove
-            ("mdcfg.wrt");
+        //        remove("mdcfg.wrt");
         psFree(md);
         checkMem();
Index: /trunk/psLib/test/types/tap_psMetadata_copying.c
===================================================================
--- /trunk/psLib/test/types/tap_psMetadata_copying.c	(revision 9804)
+++ /trunk/psLib/test/types/tap_psMetadata_copying.c	(revision 9805)
@@ -23,5 +23,5 @@
 int main(void)
 {
-    plan_tests(35);
+    plan_tests(36);
 
     diag("psMetadataCopy and psMetadataItemCopy tests");
@@ -330,9 +330,23 @@
     //Time case - invalid time item
     {
+        psTime *t = psTimeAlloc(PS_TIME_TT);
+        t->type += 1;
+        psMetadataItem *itemTime2 = psMetadataItemAlloc("itemTime", PS_DATA_TIME, "", t);
+        copy = psMetadataItemCopy(itemTime2);
+        ok( copy != NULL && copy->data.V == NULL,
+            "psMetadataItemCopy:  return non-NULL item for invalid input time item");
+        psFree(t);
+        psFree(copy);
+        psFree(itemTime2);
+    }
+    //Time case - NULL time item
+    {
         psFree(itemTime->data.V);
         itemTime->data.V = NULL;
         copy = psMetadataItemCopy(itemTime);
-        ok( copy == NULL, "psMetadataItemCopy:  return NULL for invalid time item");
+        ok( copy != NULL && copy->data.V == NULL,
+            "psMetadataItemCopy:  return non-NULL item for NULL input time item");
         //        (itemTime->data.V) = psTimeAlloc(PS_TIME_TAI);
+        psFree(copy);
     }
     //Metadata case
