Index: /trunk/psLib/src/types/psMetadata.c
===================================================================
--- /trunk/psLib/src/types/psMetadata.c	(revision 5538)
+++ /trunk/psLib/src/types/psMetadata.c	(revision 5539)
@@ -12,6 +12,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.91 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-11-17 00:27:14 $
+ *  @version $Revision: 1.92 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-11-18 01:51:03 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -316,5 +316,23 @@
 }
 
-
+psMetadata *psMetadataCopy(psMetadata *out,
+                           const psMetadata *in)
+{
+    PS_ASSERT_PTR_NON_NULL(in,NULL);
+    if (out ==  NULL) {
+        out = psMetadataAlloc();
+    }
+    psMetadataItem *item = NULL;
+    psMetadataIterator *iter = NULL;
+    iter = psMetadataIteratorAlloc(*(psMetadata**)&in, PS_LIST_HEAD, NULL);
+    item = psMetadataGetAndIncrement(iter);
+    while (item != NULL) {
+        psMetadataAddItem(out, item, PS_LIST_TAIL, 0);
+        item = psMetadataGetAndIncrement(iter);
+    }
+    psFree(item);
+    psFree(iter);
+    return out;
+}
 
 bool psMetadataAddItem(psMetadata *md,
Index: /trunk/psLib/src/types/psMetadata.h
===================================================================
--- /trunk/psLib/src/types/psMetadata.h	(revision 5538)
+++ /trunk/psLib/src/types/psMetadata.h	(revision 5539)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.70 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-11-02 01:07:25 $
+*  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2005-11-18 01:51:03 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -270,4 +270,13 @@
 );
 
+/** Creates a new copy of all the psMetadataItems in the psMetadata collection, in, and
+ *  returns them in out, or creates a new container if out is NULL.
+ *
+ *  @return psMetadata*:        the copy of the psMetadata container.
+ */
+psMetadata *psMetadataCopy(
+    psMetadata *out,                   ///< output Metadata container for copying.
+    const psMetadata *in               ///< Metadata collection to be copied.
+);
 
 /** Add existing metadata item to metadata collection.
@@ -279,5 +288,5 @@
  */
 bool psMetadataAddItem(
-    psMetadata*  md,                   ///< Metadata collection to insert metadat item.
+    psMetadata*  md,                   ///< Metadata collection to insert metadata item.
     const psMetadataItem* item,        ///< Metadata item to be added.
     int location,                      ///< Index number, PS_LIST_HEAD, or PS_LIST_TAIL
Index: /trunk/psLib/test/types/tst_psMetadata_07.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_07.c	(revision 5538)
+++ /trunk/psLib/test/types/tst_psMetadata_07.c	(revision 5539)
@@ -11,9 +11,11 @@
 *     Test F - psMetadataRemoveKey, RemoveIndex
 *     Test G - psMetadataAddPtr, psMetadataItemAllocPtr
+*     Test H - psMetadataCopy
+*     Test I - psArgument Functions
 *
 *  @author  David Robbins, MHPCC
 *
-*  @version $Revision: 1.14 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2005-11-15 22:20:17 $
+*  @version $Revision: 1.15 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2005-11-18 01:51:03 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -29,4 +31,5 @@
 static psS32 testMetaRemove(void);
 static psS32 testMetaAddPtr(void);
+static psS32 testMetaCopy(void);
 static psS32 testArgument(void);
 
@@ -36,4 +39,5 @@
                               {testMetaRemove, 0, "Test psMetadataRemoveKey/Index", 0, false},
                               {testMetaAddPtr, 0, "Test psMetadataAddPtr", 0, false},
+                              {testMetaCopy, 0, "Test psMetadataCopy", 0, false},
                               {testArgument, 0, "Test psArgument fxns", 0, false},
                               {NULL}
@@ -225,4 +229,43 @@
 }
 
+psS32 testMetaCopy(void)
+{
+    psMetadata *test = NULL;
+    psMetadata *empty = NULL;
+    psMetadata *md = setupMeta();
+
+
+    //Return NULL for NULL input Metadata
+    test = psMetadataCopy(test, empty);
+
+    //Return a copy in of md in test
+    test = psMetadataCopy(test, md);
+    //Check if contents are the same
+    psMetadataItem *testItem = NULL;
+    psMetadataItem *mdItem = NULL;
+    psMetadataIterator *testIterator = NULL;
+    psMetadataIterator *mdIterator = NULL;
+    testIterator = psMetadataIteratorAlloc(test, PS_LIST_HEAD, NULL);
+    mdIterator = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL);
+    testItem = psMetadataGetAndIncrement(testIterator);
+    mdItem = psMetadataGetAndIncrement(mdIterator);
+    while (testItem != NULL || mdItem != NULL ) {
+        if (testItem != mdItem) {
+            psError(PS_ERR_BAD_PARAMETER_VALUE, false,
+                    "Copied psMetadataItem does not match Original.\n");
+        }
+        testItem = psMetadataGetAndIncrement(testIterator);
+        mdItem = psMetadataGetAndIncrement(mdIterator);
+    }
+
+    psFree(testItem);
+    psFree(mdItem);
+    psFree(testIterator);
+    psFree(mdIterator);
+    psFree(test);
+    psFree(md);
+    return 0;
+}
+
 psS32 testArgument(void)
 {
Index: /trunk/psLib/test/types/verified/tst_psMetadata_07.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_07.stderr	(revision 5539)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_07.stderr	(revision 5539)
@@ -0,0 +1,56 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata_07{Test psMetadataIterator fxns}                *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata_07{Test psMetadataIterator fxns} | tst_psMetadata_07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata_07{Test psMetadataConfigWrite}                  *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata_07{Test psMetadataConfigWrite} | tst_psMetadata_07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata_07{Test psMetadataRemoveKey/Index}              *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata_07{Test psMetadataRemoveKey/Index} | tst_psMetadata_07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata_07{Test psMetadataAddPtr}                       *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata_07{Test psMetadataAddPtr} | tst_psMetadata_07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata_07{Test psMetadataCopy}                         *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|E|psMetadataCopy (FILE:LINENO)
+    Unallowable operation: in is NULL.
+
+---> TESTPOINT PASSED (psMetadata_07{Test psMetadataCopy} | tst_psMetadata_07.c)
+
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_07.c                                        *
+*            TestPoint: psMetadata_07{Test psArgument fxns}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+
+---> TESTPOINT PASSED (psMetadata_07{Test psArgument fxns} | tst_psMetadata_07.c)
+
