Index: /trunk/psLib/src/types/psMetadata.c
===================================================================
--- /trunk/psLib/src/types/psMetadata.c	(revision 8693)
+++ /trunk/psLib/src/types/psMetadata.c	(revision 8694)
@@ -12,6 +12,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.130 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-08-29 20:23:54 $
+ *  @version $Revision: 1.131 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-08-30 00:54:51 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -376,13 +376,6 @@
             psVector *vecCopy = psVectorCopy(NULL, (psVector*)(in->data.V),
                                              ((psVector*)(in->data.V))->type.type);
-            //Following condition was removed b/c it doesn't seem possible for a
-            //non-NULL vector to be returned for non-NULL input
-            //            if (vecCopy == NULL) {
-            //                psError(PS_ERR_BAD_PARAMETER_NULL, false,
-            //                        "Error copying vector.  Vector skipped.\n");
-            //            } else {
             newItem = psMetadataItemAlloc(in->name, PS_DATA_VECTOR, in->comment, vecCopy);
             psFree(vecCopy);    // Drop reference
-            //            }
             break;
         }
@@ -425,6 +418,21 @@
                            const psMetadata *in)
 {
-    PS_ASSERT_PTR_NON_NULL(in,NULL);
-    PS_ASSERT_PTR_NON_NULL(in->list,NULL);
+    //    PS_ASSERT_PTR_NON_NULL(in,NULL);
+    if (in == NULL) {
+        if (out != NULL) {
+            psFree(out);
+            out = NULL;
+        }
+        return out;
+    }
+    //    PS_ASSERT_PTR_NON_NULL(in->list,NULL);
+    if (in->list == NULL) {
+        if (out != NULL) {
+            psFree(out);
+            out = NULL;
+        }
+        return out;
+    }
+
     if (out ==  NULL) {
         out = psMetadataAlloc();
@@ -447,4 +455,9 @@
             psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", inItem->name,
                               inItem->comment);
+            psFree(newItem);
+            psFree(iter);
+            psFree(out);
+            out = NULL;
+            return out;
         }
         psFree(newItem);                // Drop reference
Index: /trunk/psLib/test/types/execute_tap
===================================================================
--- /trunk/psLib/test/types/execute_tap	(revision 8693)
+++ /trunk/psLib/test/types/execute_tap	(revision 8694)
@@ -1,3 +1,4 @@
 make tests
+./tap_psArray_all
 ./tap_psListIterator
 ./tap_psMetadataConfigParse
Index: /trunk/psLib/test/types/tap_psMetadata_copying.c
===================================================================
--- /trunk/psLib/test/types/tap_psMetadata_copying.c	(revision 8693)
+++ /trunk/psLib/test/types/tap_psMetadata_copying.c	(revision 8694)
@@ -19,5 +19,5 @@
 int main(void)
 {
-    plan_tests(32);
+    plan_tests(35);
 
     diag("psMetadataCopy and psMetadataItemCopy tests");
@@ -44,4 +44,30 @@
             "psMetadataCopy:  return NULL for NULL input metadata.");
     }
+    //Return NULL for NULL psMetadata input (with allocated out)
+    {
+        out = psMetadataAlloc();
+        out = psMetadataCopy(out, NULL);
+        ok( out == NULL,
+            "psMetadataCopy:  return NULL for NULL input metadata.");
+    }
+    //Return NULL for attempt to copy item of unsupported data type
+    {
+        in = psMetadataAlloc();
+        psMetadataAddS32(in, PS_LIST_HEAD, "S32", 0, "", 1);
+        psMetadataItem *notype = psMetadataGet(in, PS_LIST_HEAD);
+        notype->type = PS_DATA_METADATA_MULTI + 1000;
+        out = psMetadataCopy(out, in);
+        ok( out == NULL,
+            "psMetadataCopy:  return NULL for metadata with item of bad type.");
+        notype->type = PS_DATA_S32;
+        psFree(in);
+        in = NULL;
+        if (out != NULL)
+        {
+            psFree(out);
+            out = NULL;
+        }
+    }
+
     //Return NULL for NULL psMetadata input->list
     in = psMetadataAlloc();
@@ -52,4 +78,11 @@
     {
         ok( psMetadataCopy(out, in) == NULL,
+            "psMetadataCopy:  return NULL for NULL metadata input->list.");
+    }
+    //Return NULL for NULL psMetadata input->list (with allocated out)
+    {
+        out = psMetadataAlloc();
+        out = psMetadataCopy(out, in);
+        ok( out == NULL,
             "psMetadataCopy:  return NULL for NULL metadata input->list.");
     }
@@ -108,5 +141,5 @@
     {
         ok( psMetadataItemCopy(NULL) == NULL,
-            "psMetadataItemCopy:  return NULL for NULL input metadataItem.");
+            "psMetadataItemCopy:   return NULL for NULL input metadataItem.");
     }
 
Index: /trunk/psLib/test/types/tap_psMetadata_creating.c
===================================================================
--- /trunk/psLib/test/types/tap_psMetadata_creating.c	(revision 8693)
+++ /trunk/psLib/test/types/tap_psMetadata_creating.c	(revision 8694)
@@ -21,5 +21,5 @@
 int main(void)
 {
-    plan_tests(34);
+    plan_tests(35);
 
     diag("psMetadata & psMetadataItem Creation Functions");
@@ -60,5 +60,5 @@
            && !strncmp(itemStr->data.V, "itemStr", 10)
            && !strncmp(itemStr->comment, "", 2),
-           "psMetadataItemAllocStr:  create valid string item.");
+           "psMetadataItemAllocStr:    create valid string item.");
         skip_end();
     }
@@ -71,5 +71,5 @@
            && abs(itemF32->data.F32 - 6.66) < FLT_EPSILON
            && !strncmp(itemF32->comment, "", 2),
-           "psMetadataItemAllocF32:  create valid F32 item.");
+           "psMetadataItemAllocF32:    create valid F32 item.");
         skip_end();
     }
@@ -82,5 +82,5 @@
            && abs(itemF64->data.F64 - 0.666) < DBL_EPSILON
            && !strncmp(itemF64->comment, "", 2),
-           "psMetadataItemAllocF64:  create valid F64 item.");
+           "psMetadataItemAllocF64:    create valid F64 item.");
         skip_end();
     }
@@ -93,5 +93,5 @@
            && itemS8->data.S8 == 0
            && !strncmp(itemS8->comment, "", 2),
-           "psMetadataItemAllocS8:  create valid S8 item.");
+           "psMetadataItemAllocS8:     create valid S8 item.");
         skip_end();
     }
@@ -104,5 +104,5 @@
            && itemS16->data.S16 == 1
            && !strncmp(itemS16->comment, "", 2),
-           "psMetadataItemAllocS16:  create valid S16 item.");
+           "psMetadataItemAllocS16:    create valid S16 item.");
         skip_end();
     }
@@ -115,5 +115,5 @@
            && itemS32->data.S32 == 2
            && !strncmp(itemS32->comment, "", 2),
-           "psMetadataItemAllocS32:  create valid S32 item.");
+           "psMetadataItemAllocS32:    create valid S32 item.");
         skip_end();
     }
@@ -126,5 +126,5 @@
            && itemS64->data.S64 == 3
            && !strncmp(itemS64->comment, "", 2),
-           "psMetadataItemAllocS64:  create valid S64 item.");
+           "psMetadataItemAllocS64:    create valid S64 item.");
         skip_end();
     }
@@ -137,5 +137,5 @@
            && itemU8->data.U8 == 0
            && !strncmp(itemU8->comment, "", 2),
-           "psMetadataItemAllocU8:  create valid U8 item.");
+           "psMetadataItemAllocU8:     create valid U8 item.");
         skip_end();
     }
@@ -148,5 +148,5 @@
            && itemU16->data.U16 == 1
            && !strncmp(itemU16->comment, "", 2),
-           "psMetadataItemAllocU16:  create valid U16 item.");
+           "psMetadataItemAllocU16:    create valid U16 item.");
         skip_end();
     }
@@ -159,5 +159,5 @@
            && itemU32->data.U32 == 2
            && !strncmp(itemU32->comment, "", 2),
-           "psMetadataItemAllocU32:  create valid U32 item.");
+           "psMetadataItemAllocU32:   create valid U32 item.");
         skip_end();
     }
@@ -170,5 +170,5 @@
            && itemU64->data.U64 == 3
            && !strncmp(itemU64->comment, "", 2),
-           "psMetadataItemAllocU64:  create valid U64 item.");
+           "psMetadataItemAllocU64:   create valid U64 item.");
         skip_end();
     }
@@ -199,5 +199,5 @@
             && abs(r-1.1) < FLT_EPSILON && abs(d-2.1) < FLT_EPSILON
             && !strncmp(itemPtr->comment, "", 2),
-            "psMetadataItemAllocPtr:  create valid ptr (psSphere) item.");
+            "psMetadataItemAllocPtr:   create valid ptr (psSphere) item.");
         skip_end();
         psFree(s);
@@ -211,5 +211,5 @@
         itemNULL = psMetadataItemAlloc("itemNULL", PS_DATA_LINE, NULL, line);
         ok( itemNULL == NULL,
-            "psMetadataItemAlloc:  return NULL for unsupported type.");
+            "psMetadataItemAlloc:      return NULL for unsupported type.");
         psFree(line);
     }
@@ -224,7 +224,7 @@
             && itemAllocV->data.S32 == 4
             && !strncmp(itemAllocV->comment, "", 2),
-            "psMetadataItemAlloc:  create valid S32 item.");
+            "psMetadataItemAlloc:      create valid S32 item.");
         ok ( psMemCheckMetadataItem(itemAllocV),
-             "psMemCheckMetadataItem:  return true for valid MetadataItem.");
+             "psMemCheckMetadataItem:   return true for valid MetadataItem.");
         skip_end();
         psFree(itemAllocV);
@@ -235,5 +235,5 @@
         int j = 2;
         ok( !psMemCheckMetadataItem(&j),
-            "psMemCheckMetadataItem:  return false for non-MetadataItem input.");
+            "psMemCheckMetadataItem:   return false for non-MetadataItem input.");
     }
 
@@ -259,5 +259,5 @@
 void testMDAlloc_AddItem(void)
 {
-    diag("\n  >>>Test 2:  psMetadataAlloc & Free Fxns");
+    diag("\n  >>>Test 2:  psMetadataAlloc, psMemCheckMetadata, & psMetadataAdd Fxns");
     psMetadata *md = NULL;
     //Attempt to free a null metadata
@@ -276,4 +276,11 @@
             "psMemCheckMetadata:  return false for non-Metadata input.");
     }
+    //Return false for attempt to add a psMetadataItem with no name.
+    {
+        ok( !psMetadataAdd(md1, PS_LIST_HEAD, NULL, PS_DATA_S32, "", 1),
+            "psMetadataAdd:       return false for adding item with no name.");
+    }
+    psFree(md1);
+    md1 = psMetadataAlloc();
 
     diag("\n  >>>Test 3:  psMetadataAddItem");
@@ -282,5 +289,5 @@
     {
         ok( !psMetadataAddItem(NULL, item, PS_LIST_HEAD, PS_META_DEFAULT),
-            "psMetadataAddItem:  return false for NULL metadata input.");
+            "psMetadataAddItem:   return false for NULL metadata input.");
     }
     //Return false for metadata with NULL hash
@@ -289,5 +296,5 @@
     {
         ok( !psMetadataAddItem(md1, item, PS_LIST_HEAD, PS_META_DEFAULT),
-            "psMetadataAddItem:  return false for metadata with no hash.");
+            "psMetadataAddItem:   return false for metadata with no hash.");
     }
     psFree(md1);
@@ -297,5 +304,5 @@
     {
         ok( !psMetadataAddItem(md2, item, PS_LIST_HEAD, PS_META_DEFAULT),
-            "psMetadataAddItem:  return false for metadata with no list.");
+            "psMetadataAddItem:   return false for metadata with no list.");
     }
     psFree(md2);
@@ -303,5 +310,5 @@
     {
         ok( !psMetadataAddItem(md, NULL, PS_LIST_HEAD, PS_META_DEFAULT),
-            "psMetadataAddItem:  return false for NULL item input.");
+            "psMetadataAddItem:   return false for NULL item input.");
     }
     //Return false for psMetadataItem with NULL name
@@ -310,5 +317,5 @@
     {
         ok( !psMetadataAddItem(md, item, PS_LIST_HEAD, PS_META_DEFAULT),
-            "psMetadataAddItem:  return false for item with no name.");
+            "psMetadataAddItem:   return false for item with no name.");
     }
     psFree(item);
@@ -324,5 +331,5 @@
     {
         ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK),
-            "psMetadataAddItem:  return true for addition of PS_DATA_METADATA_MULTI.");
+            "psMetadataAddItem:   return true for addition of PS_DATA_METADATA_MULTI.");
     }
     //    printf("\n  >>Memory leakage coming from above test for METADATA_MULTI\n\n");
@@ -336,20 +343,20 @@
     {
         ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK),
-            "psMetadataAddItem:  return true for PS_META_DUPLICATE_OK flag.");
+            "psMetadataAddItem:   return true for PS_META_DUPLICATE_OK flag.");
     }
     //FLAG = PS_META_REPLACE
     {
         ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_REPLACE),
-            "psMetadataAddItem:  return true for PS_META_REPLACE flag.");
+            "psMetadataAddItem:   return true for PS_META_REPLACE flag.");
     }
     //FLAG = PS_META_NO_REPLACE
     {
         ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_NO_REPLACE),
-            "psMetadataAddItem:  return true for PS_META_NO_REPLACE flag.");
+            "psMetadataAddItem:   return true for PS_META_NO_REPLACE flag.");
     }
     //FLAG = PS_META_DEFAULT
     {
         ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DEFAULT),
-            "psMetadataAddItem:  return false for PS_META_DEFAULT flag.");
+            "psMetadataAddItem:   return false for PS_META_DEFAULT flag.");
     }
 
@@ -359,5 +366,5 @@
     {
         ok( psMetadataAddItem(md, item2, PS_LIST_TAIL, PS_META_DUPLICATE_OK),
-            "psMetadataAddItem:  return true for new item.");
+            "psMetadataAddItem:   return true for new item.");
     }
 
