Index: /trunk/psLib/src/types/psMetadata.c
===================================================================
--- /trunk/psLib/src/types/psMetadata.c	(revision 7367)
+++ /trunk/psLib/src/types/psMetadata.c	(revision 7368)
@@ -12,6 +12,6 @@
  *  @author Ross Harman, MHPCC
  *
- *  @version $Revision: 1.106 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-05-25 03:53:46 $
+ *  @version $Revision: 1.107 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-06-06 22:54:22 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -343,6 +343,5 @@
 
 
-psMetadataItem *psMetadataItemCopy(const psMetadataItem *in
-                                  )
+psMetadataItem *psMetadataItemCopy(const psMetadataItem *in)
 {
     PS_ASSERT_PTR_NON_NULL(in,NULL);
Index: /trunk/psLib/src/types/psMetadata.h
===================================================================
--- /trunk/psLib/src/types/psMetadata.h	(revision 7367)
+++ /trunk/psLib/src/types/psMetadata.h	(revision 7368)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.75 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2006-04-17 22:00:03 $
+*  @version $Revision: 1.76 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2006-06-06 22:54:22 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -204,5 +204,5 @@
     const char* name,                  ///< Name of metadata item.
     const char* comment,               ///< Comment for metadata item.
-    psS8 value                        ///< the value of the metadata item.
+    psS8 value                         ///< the value of the metadata item.
 );
 
@@ -243,5 +243,5 @@
     const char* name,                  ///< Name of metadata item.
     const char* comment,               ///< Comment for metadata item.
-    psU8 value                        ///< the value of the metadata item.
+    psU8 value                         ///< the value of the metadata item.
 );
 
@@ -347,7 +347,7 @@
  * @return psMetadataItem*: the copy of the psMetadataItem
  */
-psMetadataItem *psMetadataItemCopy(const psMetadataItem *in ///< metadata item to be copied
-                                  );
-
+psMetadataItem *psMetadataItemCopy(
+    const psMetadataItem *in           ///< metadata item to be copied
+);
 
 /** Creates a new copy of all the psMetadataItems in the psMetadata collection, in, and
@@ -417,5 +417,5 @@
     int format,                        ///< psMetadataFlag options/flags
     const char* comment,               ///< Comment for metadata item
-    bool value                       ///< Value for metadata item data
+    bool value                         ///< Value for metadata item data
 );
 
@@ -430,5 +430,5 @@
     int format,                        ///< psMetadataFlag options/flags
     const char* comment,               ///< Comment for metadata item
-    psS8 value                        ///< Value for metadata item data
+    psS8 value                         ///< Value for metadata item data
 );
 
@@ -469,5 +469,5 @@
     int format,                        ///< psMetadataFlag options/flags
     const char* comment,               ///< Comment for metadata item
-    psU8 value                        ///< Value for metadata item data
+    psU8 value                         ///< Value for metadata item data
 );
 
@@ -504,5 +504,5 @@
 bool psMetadataAddF32(
     psMetadata* md,                    ///< Metadata collection to insert metadata item
-    long location,                    ///< Index number, PS_LIST_HEAD, or PS_LIST_TAIL
+    long location,                     ///< Index number, PS_LIST_HEAD, or PS_LIST_TAIL
     const char* name,                  ///< Name of metadata item
     int format,                        ///< psMetadataFlag options/flags
Index: /trunk/psLib/test/types/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/types/tst_psMetadata_01.c	(revision 7367)
+++ /trunk/psLib/test/types/tst_psMetadata_01.c	(revision 7368)
@@ -18,6 +18,6 @@
 *  @author  Ross Harman, MHPCC
 *
-*  @version $Revision: 1.4 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2006-06-01 21:59:05 $
+*  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2006-06-06 22:54:22 $
 *
 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -28,241 +28,82 @@
 #include "pslib_strict.h"
 #include "psTest.h"
-/*
-static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
-static void printMetadata(psMetadata *metadata);
-static void printMetadataList(psList *metadataItemList, char* spaces);
-static void printMetadataTable(psHash *mdTable);
- 
-static void printMetadata(psMetadata *metadata)
+
+static psS32 testMetadataItemCopy(void);
+
+testDescription tests[] = {
+                              {testMetadataItemCopy, 666, "psMetadataItemCopy()", 0, false},
+                              {NULL}
+                          };
+
+psS32 main( psS32 argc, char* argv[] )
 {
-    printf("Contents of metadata list:\n");
-    printMetadataList(metadata->list, " ");
-    printf("\nContents of metadata table:\n");
-    printMetadataTable(metadata->hash);
+    psLogSetLevel( PS_LOG_INFO );
+
+    return ( !runTestSuite(stderr,"psMetadata_01",tests,argc,argv) );
+
 }
- 
-static void printMetadataList(psList *metadataItemList, char* spaces)
+
+psS32 testMetadataItemCopy(void)
 {
-    psMetadataItem *entryChild = NULL;
- 
-    psListIterator* iter = psListIteratorAlloc(metadataItemList, PS_LIST_HEAD, true);
- 
-    while ( (entryChild=psListGetAndIncrement(iter)) != NULL) {
-        printMetadataItem(entryChild, spaces);
+    psMetadataItem *item = psMetadataItemAlloc("metaITEM", PS_DATA_S32, "no Comment");
+    item->data.S32 = 666;
+    psMetadataItem *item2 = NULL;
+
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate error message");
+    item2 = psMetadataItemCopy(NULL);
+    if (item2 != NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, false,
+                "psMetadataItemCopy failed to return NULL for NULL input psMetadataItem.\n");
+        return 1;
     }
- 
-    psFree(iter);
- 
-}
- 
-static void printMetadataTable(psHash *mdTable)
-{
-    psS32 i;
-    psHashBucket* ptr = NULL;
-    for(i=0; i<mdTable->n; i++) {
-        ptr = mdTable->buckets[i];
-        while (ptr != NULL) {
-            printMetadataItem(ptr->data, " ");
-            ptr = ptr->next;
-        }
+
+    //Simple copy of psS32 data
+    item2 = psMetadataItemCopy(item);
+    if (item2 == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, false,
+                "psMetadataItemCopy incorrectly returned NULL for valid input psMetadataItem.\n");
+        return 2;
     }
-}
- 
-static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
-{
-    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
-    printf("Key mdType: 0x%08x  ", metadataItem->type);
- 
-    switch (metadataItem->type) {
-    case PS_DATA_METADATA_MULTI:
-        printf("Key Value: %17c", ' ');
-        break;
-    case PS_DATA_BOOL:
-        printf("Key Value: %15d  ", metadataItem->data.B);
-        break;
-    case PS_DATA_S32:
-        printf("Key Value: %15d  ", metadataItem->data.S32);
-        break;
-    case PS_DATA_F32:
-        printf("Key Value: %15.3f  ", metadataItem->data.F32);
-        break;
-    case PS_DATA_F64:
-        printf("Key Value: %15.3f  ", metadataItem->data.F64);
-        break;
-    case PS_DATA_STRING:
-        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
-        break;
-    default:
-        printf("Bad type: %d ", metadataItem->type);
+    if ( strncmp(item2->name, item->name, 10) || item2->type != item->type ||
+            item2->data.S32 != item->data.S32 || strncmp(item2->comment, item->comment, 15) ) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false,
+                "psMetadataItemCopy returned an incorrect psMetadataItem (S32 test).\n");
+        return 3;
     }
-    printf("Key Comment: %s\n", metadataItem->comment);
- 
-    if(metadataItem->data.V && metadataItem->type==PS_DATA_METADATA_MULTI) {
-        printMetadataList(metadataItem->data.V, "    ");
+    psFree(item2);
+    psFree(item);
+    item2 = NULL;
+
+    //Copy of MetadataItem containing a psMetadata
+    psMetadata* metadata = psMetadataAlloc();
+    psMetadataAddS32(metadata, PS_LIST_TAIL, "item01", 0, "", 55);
+    psMetadataAddF32(metadata, PS_LIST_TAIL, "item02", 0, NULL, 3.14);
+    item = psMetadataItemAlloc("metaItem2", PS_DATA_METADATA, "newMeta", metadata);
+    //    item->data.md = psMetadataCopy(item->data.md, metadata);
+    item2 = psMetadataItemCopy(item);
+    if (item2 == NULL || item2->data.md == NULL) {
+        psError(PS_ERR_BAD_PARAMETER_NULL, false,
+                "psMetadataItemCopy returned either a NULL item or NULL metadata data\n");
+        return 4;
     }
-}
-*/
+    if ( strncmp(item2->name, item->name, 11) || item2->type != item->type ||
+            strncmp(item2->comment, item->comment, 15) ) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false,
+                "psMetadataItemCopy returned an incorrect psMetadataItem (Metadata test).\n");
+        return 5;
+    }
+    psMetadataItem *temp1 = psMetadataGet(item->data.md, PS_LIST_HEAD);
+    psMetadataItem *temp2 = psMetadataGet(item2->data.md, PS_LIST_HEAD);
+    if ( strncmp(temp2->name, temp1->name, 10) || temp2->type != temp1->type ||
+            temp2->data.S32 != temp1->data.S32 || strncmp(temp2->comment, temp1->comment, 15) ) {
+        psError(PS_ERR_BAD_PARAMETER_VALUE, false,
+                "psMetadataItemCopy incorrectly returned non-matching metadata data.\n");
+        return 6;
+    }
 
-psS32 main(psS32 argc, char* argv[])
-{
-    /*    psMetadata *metadata1 = NULL;
-        psMetadata *metadata2 = NULL;
-        psMetadata *metadata3 = NULL;
-    */
-
-    // Test A - Read 1st hdr from simple FITS file
-
-    /* Header contents for header_1.fits:
-
-        SIMPLE  =                    T / file does conform to FITS standard
-        BITPIX  =                    8 / number of bits per data pixel
-        NAXIS   =                    0 / number of data axes
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T11:11:18
-        END
-    */
-    /*    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file");
-    //    metadata1 = psMetadataReadHeader(metadata1, NULL, 1, "header_1.fits");
-        metadata1 = psFitsReadHeader(metadata1, "header_1.fits");
-        printMetadata(metadata1);
-        printFooter(stdout, "psMetadata", "Test A - Read 1st hdr from simple FITS file", true);
-    */
-    // Test B - Read 2nd hdr from complex FITS file
-
-    /* Header contents for header_2.fits:
-
-        SIMPLE  =                    T / file does conform to FITS standard
-        BITPIX  =                  -64 / number of bits per data pixel
-        NAXIS   =                    1 / number of data axes
-        NAXIS1  =                   64 / length of data axis 1
-        EXTEND  =                    T / FITS dataset may contain extensions
-        COMMENT   FITS (Flexible Image Transport System) format is defined in 'Astronomy
-        COMMENT   and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H
-        END
-        <DATA>
-
-        XTENSION= 'IMAGE   '           / IMAGE extension
-        BITPIX  =                  -64 / number of bits per data pixel
-        NAXIS   =                    1 / number of data axes
-        NAXIS1  =                   64 / length of data axis 1
-        PCOUNT  =                    0 / required keyword; must = 0
-        GCOUNT  =                    1 / required keyword; must = 1
-        BITPIX  =                  -64 / number of bits per data pixel
-        EXTNAME = 'MY_DATA_1'
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:14:45
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:15:29
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:18
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:21:46
-        END
-        <DATA>
-
-        XTENSION= 'IMAGE   '           / IMAGE extension
-        BITPIX  =                  -64 / number of bits per data pixel
-        NAXIS   =                    1 / number of data axes
-        NAXIS1  =                   64 / length of data axis 1
-        PCOUNT  =                    0 / required keyword; must = 0
-        GCOUNT  =                    1 / required keyword; must = 1
-        EXTNAME = 'MY_DATA_2'
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:12
-        HISTORY File modified by user 'harman' with fv  on 2004-08-04T13:22:52
-        END
-        <DATA>
-    */
-    /*    printPositiveTestHeader(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file");
-    //    metadata2 = psMetadataReadHeader(metadata2, NULL, 2, "header_2.fits");
-        metadata2 = psFitsReadHeader(metadata2, "header_2.fits");
-        printMetadata(metadata2);
-        printFooter(stdout, "psMetadata", "Test B - Read 2nd hdr from complex FITS file", true);
-     
-        // Test C - Read named hdr from complex FITS file
-        printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
-    //    metadata3 = psMetadataReadHeader(metadata3, "MY_DATA_2", -1, "header_2.fits");
-        metadata3 = psFitsReadHeader(metadata3, "header_2.fits");
-        printMetadata(metadata3);
-        printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
-     
-     
-        // Test D - Remove items with same name from all metadata
-        printPositiveTestHeader(stdout, "psMetadata", "Test D - Remove items with same name from all metadata");
-        printf("Removed HISTORY from all metadata from prior test. Resulting metadata:\n\n");
-        psMetadataRemove(metadata3, 0, "HISTORY");
-        printMetadata(metadata3);
-        printFooter(stdout, "psMetadata", "Test D - Remove items with same name from all metadata", true);
-     
-     
-        // Test E - Attempt to use null file filename
-        printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to use null filename",
-                                "Null fileName not allowed", 0);
-    //    psMetadataReadHeader(NULL, NULL, 1, NULL);
-        psFitsReadHeader(NULL, NULL);
-        printFooter(stdout, "psMetadata", "Test E - Attempt to use null filename", true);
-     
-     
-        // Test F - Attempt to open nonexistant file
-        printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to open nonexistant file",
-                                "FITS error while opening file: missing.dat...Couldn't close FITS file...", 0);
-    //    psMetadataReadHeader(NULL, NULL, 1, "missing.dat");
-        psFitsReadHeader(NULL, "missing.dat");
-        printFooter(stdout, "psMetadata", "Test F - Attempt to open nonexistant file", true);
-     
-     
-        // Test G - Attempt to use two null inputs
-        printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use two null inputs",
-                                "Null extName and extNum = 0 not allowed", 0);
-    //    psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
-        psFitsReadHeader(NULL, "header_2.fits");
-        printFooter(stdout, "psMetadata", "Test G - Attempt to use two null inputs", true);
-     
-     
-        // Test H - Attempt to use bad extNum
-        printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use bad extNum",
-                                "FITS error while locating header 22: tried to move past end of file", 0);
-    //    metadata1 = psMetadataReadHeader(metadata1, NULL, 22, "header_2.fits");
-        metadata1 = psFitsReadHeader(metadata1, "header_2.fits");
-        if (metadata1 != NULL ) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null when invalid ext given.");
-            return 10;
-        }
-        printFooter(stdout, "psMetadata", "Test H - Attempt to use bad extNum", true);
-     
-     
-        // Test I - Attempt to use bad extName
-        printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use bad extName",
-                                "FITS error while locating header AARGH: illegal HDU number", 0);
-    //    metadata1 = psMetadataReadHeader(NULL, "AARGH", -1, "header_2.fits");
-        metadata1 = psFitsReadHeader(NULL, "header_2.fits");
-        if (metadata1 != NULL ) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null invalid extname give.");
-            return 11;
-        }
-        printFooter(stdout, "psMetadata", "Test I - Attempt to use bad extName", true);
-     
-     
-        // Test J - Read named hdr w/ invalid extnum
-        printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum",
-                                "If extName specified, extNum should be -1.", 0);
-    //    metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
-        metadata1 = psFitsReadHeader(metadata1, "header_2.fits");
-        if (metadata1 != NULL ) {
-            psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum");
-            return 12;
-        }
-        printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true);
-     
-     
-        // Test K - Free psMetadata
-        printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
-        psFree(metadata1);
-        psFree(metadata2);
-        psFree(metadata3);
-        if(psMemCheckLeaks(0, NULL, stdout,false)) {
-            psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
-        }
-        psMemCheckCorruption(0);
-        psS32 nBad = psMemCheckCorruption(0);
-        if(nBad) {
-            printf("ERROR: Found %d bad memory blocks\n", nBad);
-        }
-        printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
-    */
+    psFree(item2);
+    psFree(metadata);
+    psFree(item);
     return 0;
 }
+
Index: /trunk/psLib/test/types/verified/tst_psMetadata_01.stderr
===================================================================
--- /trunk/psLib/test/types/verified/tst_psMetadata_01.stderr	(revision 7367)
+++ /trunk/psLib/test/types/verified/tst_psMetadata_01.stderr	(revision 7368)
@@ -0,0 +1,13 @@
+/***************************** TESTPOINT ******************************************\
+*             TestFile: tst_psMetadata_01.c                                        *
+*            TestPoint: psMetadata_01{psMetadataItemCopy()}                        *
+*             TestType: Positive                                                   *
+\**********************************************************************************/
+
+<DATE><TIME>|<HOST>|I|testMetadataItemCopy
+    Following should generate error message
+<DATE><TIME>|<HOST>|E|psMetadataItemCopy (FILE:LINENO)
+    Unallowable operation: in is NULL.
+
+---> TESTPOINT PASSED (psMetadata_01{psMetadataItemCopy()} | tst_psMetadata_01.c)
+
