Index: /trunk/psLib/src/astronomy/psMetadata.c
===================================================================
--- /trunk/psLib/src/astronomy/psMetadata.c	(revision 1393)
+++ /trunk/psLib/src/astronomy/psMetadata.c	(revision 1394)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-08-05 19:38:51 $
+*  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-08-05 20:55:16 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -39,9 +39,13 @@
 /******************************************************************************/
 
-/** Maximum length of string */
-#define MAX_STRING_LENGTH 1024
-
-/** Maximum length of FITS line */
-#define FITS_LINE_SIZE 80
+#define FITS_ERROR(STRING,PS_ERROR)                                                                          \
+fits_get_errstatus(status, fitsErr);                                                                     \
+psError( __func__, STRING, PS_ERROR, fitsErr);                                                           \
+status = 0;                                                                                              \
+if(fits_close_file(fd, &status) != 0) {                                                                  \
+    fits_get_errstatus(status, fitsErr);                                                                 \
+    psError( __func__, "FITS error while closing file: ", fitsErr);                                      \
+}                                                                                                        \
+return output;
 
 /******************************************************************************/
@@ -72,5 +76,5 @@
     type = metadataItem->type;
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         return ;
     }
@@ -80,10 +84,10 @@
     psFree( metadataItem->items );
 
-    if ( type == PS_META_STR ||
+    if(type == PS_META_STR ||
             type == PS_META_IMG ||
             type == PS_META_JPEG ||
             type == PS_META_PNG ||
             type == PS_META_ASTROM ||
-            type == PS_META_UNKNOWN ) {
+            type == PS_META_UNKNOWN) {
         psFree( metadataItem->data.V );
     }
@@ -92,5 +96,5 @@
 static void metadataFree( psMetadata *metadata )
 {
-    if ( metadata == NULL ) {
+    if(metadata == NULL) {
         return ;
     }
@@ -124,5 +128,5 @@
     psMetadataItem * metadataItem = NULL;
 
-    if ( name == NULL ) {
+    if(name == NULL) {
         psError( __func__, "Null value for string not allowed" );
         return NULL;
@@ -131,5 +135,5 @@
     // Allocate metadata item
     metadataItem = ( psMetadataItem * ) psAlloc( sizeof( psMetadataItem ) );
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psAbort( __func__, "Failed to allocate memory" );
     }
@@ -140,5 +144,5 @@
     // Allocate and set metadata item comment
     metadataItem->comment = ( char * ) psAlloc( sizeof( char ) * MAX_STRING_LENGTH );
-    if ( comment == NULL ) {
+    if(comment == NULL) {
         // Per SDRS, null isn't allowed, must use "" instead
         strncpy( metadataItem->comment, "", MAX_STRING_LENGTH );
@@ -154,5 +158,5 @@
 
     // Set metadata item value
-    switch ( type ) {
+    switch(type) {
     case PS_META_BOOL:
         metadataItem->data.B = ( bool ) va_arg( argPtr, int );
@@ -197,5 +201,5 @@
     // Allocate metadata
     metadata = ( psMetadata * ) psAlloc( sizeof( psMetadata ) );
-    if ( metadata == NULL ) {
+    if(metadata == NULL) {
         psAbort( __func__, "Failed to allocate metadata" );
     }
@@ -206,10 +210,10 @@
     // Allocate metadata's internal containers
     list = ( psList * ) psListAlloc( NULL );
-    if ( list == NULL ) {
+    if(list == NULL) {
         psAbort( __func__, "Failed to allocate list" );
     }
 
     table = ( psHash * ) psHashAlloc( 10 );
-    if ( table == NULL ) {
+    if(table == NULL) {
         psAbort( __func__, "Failed to allocate table" );
     }
@@ -229,10 +233,10 @@
     psMetadataType type = PS_META_ITEM_SET;
 
-    if ( md == NULL ) {
+    if(md == NULL) {
         psError( __func__, "Null metadata collection not allowed" );
         return false;
     }
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psError( __func__, "Null metadata item not allowed" );
         return false;
@@ -242,5 +246,5 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return false;
@@ -248,5 +252,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -254,5 +258,5 @@
 
     key = metadataItem->name;
-    if ( key == NULL ) {
+    if(key == NULL) {
         psError( __func__, "Null key item not allowed" );
         return false;
@@ -261,14 +265,14 @@
     // Check if key is already in table
     value = ( psMetadataItem* ) psHashLookup( mdTable, key );
-    if ( value != NULL && type != PS_META_ITEM_SET ) {
+    if(value != NULL && type != PS_META_ITEM_SET) {
 
         // The key was found and the new metadata item is a leaf node (its type isn't PS_META_ITEM_SET), so
         // add the new metadata item to hash as a child of the existing metadata item folder node.
-        if ( !psListAdd( value->items, metadataItem, where ) ) {
+        if(!psListAdd( value->items, metadataItem, where )) {
             psError( __func__, "Couldn't add metadata item to items list. Name: %s",
                      metadataItem->name );
             return false;
         }
-    } else if ( value != NULL ) {
+    } else if(value != NULL) {
 
         // The key was found and the new metadata item is a folder node. Don't add new metadata item, since
@@ -280,5 +284,5 @@
 
         // Duplicate key not found. Add new metadata item to metadata collection's hash
-        if ( !psHashAdd( mdTable, key, metadataItem ) ) {
+        if(!psHashAdd( mdTable, key, metadataItem )) {
             psError( __func__, "Couldn't add metadata item to metadata collection table. Name: %s",
                      metadataItem->name );
@@ -288,5 +292,5 @@
 
     // Add all items to metadata collection's list, even if they have the same metadata item names
-    if ( !psListAdd( md->list, metadataItem, where ) ) {
+    if(!psListAdd( md->list, metadataItem, where )) {
         psError( __func__, "Couldn't add metadata item to metadata collection list. Name: %s",
                  metadataItem->name );
@@ -307,5 +311,5 @@
     va_end( argPtr );
 
-    if ( !psMetadataAddItem( md, where, metadataItem ) ) {
+    if(!psMetadataAddItem( md, where, metadataItem )) {
         psError( __func__, "Couldn't add metadata item to metadata collection list. Name: %s",
                  metadataItem->name );
@@ -329,5 +333,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -335,5 +339,5 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return false;
@@ -341,9 +345,9 @@
 
     // Select removal by key or index
-    if ( key != NULL ) {
+    if(key != NULL) {
 
         // Remove by key name
         entry = ( psMetadataItem* ) psHashLookup( mdTable, key );
-        if ( entry == NULL ) {
+        if(entry == NULL) {
             psError( __func__, "Couldn't find metadata item remove. Name: %s", key );
             return false;
@@ -351,11 +355,11 @@
 
         numChildren = entry->items->size;
-        if ( entry->type == PS_META_ITEM_SET && numChildren > 0 ) {
+        if(entry->type == PS_META_ITEM_SET && numChildren > 0) {
 
             // Table entry has children. Entry and children must be removed from metadata collection's list
             psListSetIterator( mdList, PS_LIST_HEAD );
             entryChild = psListGetCurrent( mdList );
-            while ( entryChild != NULL ) {
-                if ( !psListRemove( entry->items, entryChild, PS_LIST_UNKNOWN ) ) {
+            while(entryChild != NULL) {
+                if(!psListRemove( entry->items, entryChild, PS_LIST_UNKNOWN )) {
                     psError( __func__, "Couldn't remove metadata item from list. Name: %s", key );
                     return false;
@@ -366,5 +370,5 @@
 
         // Remove entry from metadata collection's list
-        if ( !psListRemove( mdList, entry, PS_LIST_UNKNOWN ) ) {
+        if(!psListRemove( mdList, entry, PS_LIST_UNKNOWN )) {
             psError( __func__, "Couldn't remove metadata item from list. Name: %s", key );
             return false;
@@ -372,5 +376,5 @@
 
         // Remove entry from metadata collection's table
-        if ( !psHashRemove( mdTable, key ) ) {
+        if(!psHashRemove( mdTable, key )) {
             psError( __func__, "Couldn't remove metadata item from table. Name: %s", key );
             return false;
@@ -380,5 +384,5 @@
         // Remove by index
         entry = psListGet( mdList, where );
-        if ( entry == NULL ) {
+        if(entry == NULL) {
             psError( __func__, "Couldn't find metadata item from list. Index: %d", where );
             return false;
@@ -386,5 +390,5 @@
 
         key = entry->name;
-        if ( key == NULL ) {
+        if(key == NULL) {
             psError( __func__, "Null key name not allowed. Index: %d", where );
             return false;
@@ -404,10 +408,10 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return NULL;
     }
 
-    if ( key == NULL ) {
+    if(key == NULL) {
         psError( __func__, "Null key name not allowed" );
         return NULL;
@@ -415,5 +419,5 @@
 
     entry = ( psMetadataItem* ) psHashLookup( mdTable, key );
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Could not find metadata item with given key. Key: %s", key );
         return NULL;
@@ -429,5 +433,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -435,5 +439,5 @@
 
     entry = ( psMetadataItem* ) psListGet( mdList, where );
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given index. Index: %d", where );
         return NULL;
@@ -448,5 +452,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -464,11 +468,11 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
-        psError( __func__, "Null metadata list not allowed" );
-        return NULL;
-    }
-
-    mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
+        psError( __func__, "Null metadata list not allowed" );
+        return NULL;
+    }
+
+    mdList = md->list;
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -477,6 +481,6 @@
     psListSetIterator( mdList, which );
     entry = psListGetCurrent( mdList );
-    while ( entry != NULL ) {
-        if ( !strncmp( match, entry->name, strlen( match ) ) ) {
+    while(entry != NULL) {
+        if(!strncmp( match, entry->name, strlen( match ) )) {
 
             // Match found
@@ -487,5 +491,5 @@
 
     // Match not found
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given match. Match: %s", match );
     }
@@ -500,11 +504,11 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
-        psError( __func__, "Null metadata list not allowed" );
-        return NULL;
-    }
-
-    mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
+        psError( __func__, "Null metadata list not allowed" );
+        return NULL;
+    }
+
+    mdList = md->list;
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -513,6 +517,6 @@
     psListSetIterator( mdList, which );
     entry = psListGetCurrent( mdList );
-    while ( entry != NULL ) {
-        if ( !strncmp( match, entry->name, strlen( match ) ) ) {
+    while(entry != NULL) {
+        if(!strncmp( match, entry->name, strlen( match ) )) {
 
             // Match found
@@ -523,5 +527,5 @@
 
     // Match not found
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given match. Match: %s", match );
     }
@@ -534,15 +538,15 @@
     psMetadataType type;
 
-    if ( fd == NULL ) {
+    if(fd == NULL) {
         psError( __func__, "Null file descriptor not allowed" );
         return ;
     }
 
-    if ( format == NULL ) {
+    if(format == NULL) {
         psError( __func__, "Null format not allowed" );
         return ;
     }
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psError( __func__, "Null metadata not allowed" );
         return ;
@@ -551,5 +555,5 @@
     type = metadataItem->type;
 
-    switch ( type ) {
+    switch(type) {
     case PS_META_BOOL:
         fprintf( fd, format, metadataItem->data.B );
@@ -578,5 +582,5 @@
 }
 
-psMetadata *psMetadataFReadHeader( psMetadata *output, const char *extname, int extnum, fitsfile *fd )
+psMetadata *psMetadataFReadHeader( psMetadata *output, char *extName, int extNum, fitsfile *fd )
 {
     bool tempBool;
@@ -587,5 +591,4 @@
     char keyComment[ FITS_LINE_SIZE ];
     char fitsErr[ MAX_STRING_LENGTH ];
-    char* tempExtname = NULL;
     int i;
     int hduType = 0;
@@ -595,64 +598,49 @@
     psMetadataType metadataItemType;
 
-    if ( fd == NULL ) {
+    if(fd == NULL) {
         psError( __func__, "Null FITS file descriptor not allowed" );
         return NULL;
     }
 
-    if ( extname == NULL && extnum == 0 ) {
-        psError( __func__, "Null extname AND extnum = 0 not allowed" );
-        return NULL;
-    } else if ( extname && extnum ) {
-        psError( __func__, "Both extname AND extnum arguments should not have values." );
+    if(extName == NULL && extNum == 0) {
+        psError( __func__, "Null extName and extNum = 0 not allowed" );
+        return NULL;
+    } else if(extName && extNum) {
+        psError( __func__, "Both extName and extNum arguments should not have non zero values." );
         return NULL;
     }
 
     // Allocate metadata if user didn't
-    if ( output == NULL ) {
+    if(output == NULL) {
         output = psMetadataAlloc();
     }
 
     // Move to user designated HDU number or HDU name in FITS file. HDU numbers starts at one.
-    if ( extname == NULL ) {
-        if ( fits_movabs_hdu( fd, extnum, &hduType, &status ) != 0 ) {
+    if(extName != NULL) {
+        if(fits_movnam_hdu( fd, ANY_HDU, extName, 0, &status ) != 0) {
+            FITS_ERROR("FITS error while locating header %s: %s", extName);
+        }
+    } else {
+        if(fits_movabs_hdu( fd, extNum, &hduType, &status ) != 0) {
+            FITS_ERROR("FITS error while locating header %d: %s", extNum);
+        }
+    }
+
+    // Get number of key names
+    if(fits_get_hdrpos( fd, &numKeys, &keyNum, &status ) != 0) {
+        FITS_ERROR("FITS error while reading key %d: %s", keyNum);
+    }
+
+    // Get each key name. Keywords start at one.
+    for(i = 1; i <= numKeys; i++) {
+        if(fits_read_keyn( fd, i, keyName, keyValue, keyComment, &status ) != 0) {
+            FITS_ERROR("FITS error while reading key %d: %s", keyNum);
+        }
+        if(fits_get_keytype( keyValue, &keyType, &status ) != 0) {
             fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while locating header: %s", fitsErr );
-            status = 0;
-            return output;
-        }
-    } else if ( extnum > 0 ) {
-        tempExtname = ( char* ) extname;
-        if ( fits_movnam_hdu( fd, ANY_HDU, tempExtname, 0, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while locating header: %s", fitsErr );
-            status = 0;
-            return output;
-        }
-    }
-
-    // Get number of key names
-    if ( fits_get_hdrpos( fd, &numKeys, &keyNum, &status ) != 0 ) {
-        fits_get_errstatus( status, fitsErr );
-        psError( __func__, "FITS error while reading keys: %s", fitsErr );
-        status = 0;
-        return output;
-    }
-
-    // Get each key name. Keywords start at one.
-    for ( i = 1; i <= numKeys; i++ ) {
-        if ( fits_read_keyn( fd, i, keyName, keyValue, keyComment, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while reading key number %d: %s", i, fitsErr );
-            status = 0;
-            return output;
-        }
-        if ( fits_get_keytype( keyValue, &keyType, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            if ( status != VALUE_UNDEFINED ) {
-                psError( __func__, "FITS error while determining key type: %s", fitsErr );
-                status = 0;
-                return output;
+            if(status != VALUE_UNDEFINED) {
+                FITS_ERROR("FITS error while determining key %d type: %s", keyNum);
             } else {
-                // Some keywords are still valid even though they don't have a type or value, like COMMENTS
+                // Some keywords are still valid even though they don't have a type, like COMMENTS and HISTORY
                 keyType = 'C';
                 status = 0;
@@ -660,21 +648,21 @@
         }
 
-        switch ( keyType ) {
+        switch(keyType) {
         case 'I':
             metadataItemType = PS_META_S32;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, atoi( keyValue ) );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi( keyValue ) );
             break;
         case 'F':
             metadataItemType = PS_META_F64;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, atof( keyValue ) );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof( keyValue ) );
             break;
         case 'C':
             metadataItemType = PS_META_STR;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, keyValue );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue );
             break;
         case 'L':
             metadataItemType = PS_META_BOOL;
             tempBool = ( keyValue[ 0 ] == 'T' ) ? 1 : 0;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, tempBool );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool );
             break;
         case 'U':
@@ -685,6 +673,7 @@
         }
 
-        if ( !success ) {
+        if(!success) {
             psError( __func__, "Failed to add metadata item. Name: %s", keyName );
+            return output;
         }
     }
Index: /trunk/psLib/src/astronomy/psMetadata.h
===================================================================
--- /trunk/psLib/src/astronomy/psMetadata.h	(revision 1393)
+++ /trunk/psLib/src/astronomy/psMetadata.h	(revision 1394)
@@ -10,6 +10,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.14 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-08-05 19:38:51 $
+*  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-08-05 20:55:22 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -251,10 +251,11 @@
     FILE *fd,                                       ///< Pointer to file to write metadata item.
     const char *format,                             ///< Format to print metadata item.
-    const psMetadataItem *restrict metadataItem ///< Metadata item to print.
+    const psMetadataItem *restrict metadataItem     ///< Metadata item to print.
 );
 
 /** Read metadata header.
  *
- * Read a metadata header from file. If the file is not found, an error is reported.
+ * Read a metadata header from file. If the file is not found, an error is reported. This file is currently
+ * unimplemented.
  *
  * @return psMetadata*: Pointer metadata.
@@ -262,7 +263,7 @@
 psMetadata *psMetadataReadHeader(
     psMetadata *output,                     ///< Resulting metadata from read.
-    const char *extname,                    ///< File name extension string.
+    char *extname,                          ///< File name extension string.
     int extnum,                             ///< File name extension number. Starts at 1.
-    const char *filename                ///< Name of file to read.
+    char *filename                          ///< Name of file to read.
 );
 
@@ -275,7 +276,7 @@
 psMetadata *psMetadataFReadHeader(
     psMetadata *output,                     ///< Resulting metadata from read.
-    const char *extname,                    ///< File name extension string.
-    int extnum,                             ///< File name extension number.
-    fitsfile *fd                           ///< Pointer to file to read.
+    char *extName,                          ///< File name extension string.
+    int extNum,                             ///< File name extension number.
+    fitsfile *fd                            ///< Pointer to file to read.
 );
 /// @}
Index: /trunk/psLib/src/collections/psMetadata.c
===================================================================
--- /trunk/psLib/src/collections/psMetadata.c	(revision 1393)
+++ /trunk/psLib/src/collections/psMetadata.c	(revision 1394)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-08-05 19:38:51 $
+*  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-08-05 20:55:16 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -39,9 +39,13 @@
 /******************************************************************************/
 
-/** Maximum length of string */
-#define MAX_STRING_LENGTH 1024
-
-/** Maximum length of FITS line */
-#define FITS_LINE_SIZE 80
+#define FITS_ERROR(STRING,PS_ERROR)                                                                          \
+fits_get_errstatus(status, fitsErr);                                                                     \
+psError( __func__, STRING, PS_ERROR, fitsErr);                                                           \
+status = 0;                                                                                              \
+if(fits_close_file(fd, &status) != 0) {                                                                  \
+    fits_get_errstatus(status, fitsErr);                                                                 \
+    psError( __func__, "FITS error while closing file: ", fitsErr);                                      \
+}                                                                                                        \
+return output;
 
 /******************************************************************************/
@@ -72,5 +76,5 @@
     type = metadataItem->type;
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         return ;
     }
@@ -80,10 +84,10 @@
     psFree( metadataItem->items );
 
-    if ( type == PS_META_STR ||
+    if(type == PS_META_STR ||
             type == PS_META_IMG ||
             type == PS_META_JPEG ||
             type == PS_META_PNG ||
             type == PS_META_ASTROM ||
-            type == PS_META_UNKNOWN ) {
+            type == PS_META_UNKNOWN) {
         psFree( metadataItem->data.V );
     }
@@ -92,5 +96,5 @@
 static void metadataFree( psMetadata *metadata )
 {
-    if ( metadata == NULL ) {
+    if(metadata == NULL) {
         return ;
     }
@@ -124,5 +128,5 @@
     psMetadataItem * metadataItem = NULL;
 
-    if ( name == NULL ) {
+    if(name == NULL) {
         psError( __func__, "Null value for string not allowed" );
         return NULL;
@@ -131,5 +135,5 @@
     // Allocate metadata item
     metadataItem = ( psMetadataItem * ) psAlloc( sizeof( psMetadataItem ) );
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psAbort( __func__, "Failed to allocate memory" );
     }
@@ -140,5 +144,5 @@
     // Allocate and set metadata item comment
     metadataItem->comment = ( char * ) psAlloc( sizeof( char ) * MAX_STRING_LENGTH );
-    if ( comment == NULL ) {
+    if(comment == NULL) {
         // Per SDRS, null isn't allowed, must use "" instead
         strncpy( metadataItem->comment, "", MAX_STRING_LENGTH );
@@ -154,5 +158,5 @@
 
     // Set metadata item value
-    switch ( type ) {
+    switch(type) {
     case PS_META_BOOL:
         metadataItem->data.B = ( bool ) va_arg( argPtr, int );
@@ -197,5 +201,5 @@
     // Allocate metadata
     metadata = ( psMetadata * ) psAlloc( sizeof( psMetadata ) );
-    if ( metadata == NULL ) {
+    if(metadata == NULL) {
         psAbort( __func__, "Failed to allocate metadata" );
     }
@@ -206,10 +210,10 @@
     // Allocate metadata's internal containers
     list = ( psList * ) psListAlloc( NULL );
-    if ( list == NULL ) {
+    if(list == NULL) {
         psAbort( __func__, "Failed to allocate list" );
     }
 
     table = ( psHash * ) psHashAlloc( 10 );
-    if ( table == NULL ) {
+    if(table == NULL) {
         psAbort( __func__, "Failed to allocate table" );
     }
@@ -229,10 +233,10 @@
     psMetadataType type = PS_META_ITEM_SET;
 
-    if ( md == NULL ) {
+    if(md == NULL) {
         psError( __func__, "Null metadata collection not allowed" );
         return false;
     }
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psError( __func__, "Null metadata item not allowed" );
         return false;
@@ -242,5 +246,5 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return false;
@@ -248,5 +252,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -254,5 +258,5 @@
 
     key = metadataItem->name;
-    if ( key == NULL ) {
+    if(key == NULL) {
         psError( __func__, "Null key item not allowed" );
         return false;
@@ -261,14 +265,14 @@
     // Check if key is already in table
     value = ( psMetadataItem* ) psHashLookup( mdTable, key );
-    if ( value != NULL && type != PS_META_ITEM_SET ) {
+    if(value != NULL && type != PS_META_ITEM_SET) {
 
         // The key was found and the new metadata item is a leaf node (its type isn't PS_META_ITEM_SET), so
         // add the new metadata item to hash as a child of the existing metadata item folder node.
-        if ( !psListAdd( value->items, metadataItem, where ) ) {
+        if(!psListAdd( value->items, metadataItem, where )) {
             psError( __func__, "Couldn't add metadata item to items list. Name: %s",
                      metadataItem->name );
             return false;
         }
-    } else if ( value != NULL ) {
+    } else if(value != NULL) {
 
         // The key was found and the new metadata item is a folder node. Don't add new metadata item, since
@@ -280,5 +284,5 @@
 
         // Duplicate key not found. Add new metadata item to metadata collection's hash
-        if ( !psHashAdd( mdTable, key, metadataItem ) ) {
+        if(!psHashAdd( mdTable, key, metadataItem )) {
             psError( __func__, "Couldn't add metadata item to metadata collection table. Name: %s",
                      metadataItem->name );
@@ -288,5 +292,5 @@
 
     // Add all items to metadata collection's list, even if they have the same metadata item names
-    if ( !psListAdd( md->list, metadataItem, where ) ) {
+    if(!psListAdd( md->list, metadataItem, where )) {
         psError( __func__, "Couldn't add metadata item to metadata collection list. Name: %s",
                  metadataItem->name );
@@ -307,5 +311,5 @@
     va_end( argPtr );
 
-    if ( !psMetadataAddItem( md, where, metadataItem ) ) {
+    if(!psMetadataAddItem( md, where, metadataItem )) {
         psError( __func__, "Couldn't add metadata item to metadata collection list. Name: %s",
                  metadataItem->name );
@@ -329,5 +333,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -335,5 +339,5 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return false;
@@ -341,9 +345,9 @@
 
     // Select removal by key or index
-    if ( key != NULL ) {
+    if(key != NULL) {
 
         // Remove by key name
         entry = ( psMetadataItem* ) psHashLookup( mdTable, key );
-        if ( entry == NULL ) {
+        if(entry == NULL) {
             psError( __func__, "Couldn't find metadata item remove. Name: %s", key );
             return false;
@@ -351,11 +355,11 @@
 
         numChildren = entry->items->size;
-        if ( entry->type == PS_META_ITEM_SET && numChildren > 0 ) {
+        if(entry->type == PS_META_ITEM_SET && numChildren > 0) {
 
             // Table entry has children. Entry and children must be removed from metadata collection's list
             psListSetIterator( mdList, PS_LIST_HEAD );
             entryChild = psListGetCurrent( mdList );
-            while ( entryChild != NULL ) {
-                if ( !psListRemove( entry->items, entryChild, PS_LIST_UNKNOWN ) ) {
+            while(entryChild != NULL) {
+                if(!psListRemove( entry->items, entryChild, PS_LIST_UNKNOWN )) {
                     psError( __func__, "Couldn't remove metadata item from list. Name: %s", key );
                     return false;
@@ -366,5 +370,5 @@
 
         // Remove entry from metadata collection's list
-        if ( !psListRemove( mdList, entry, PS_LIST_UNKNOWN ) ) {
+        if(!psListRemove( mdList, entry, PS_LIST_UNKNOWN )) {
             psError( __func__, "Couldn't remove metadata item from list. Name: %s", key );
             return false;
@@ -372,5 +376,5 @@
 
         // Remove entry from metadata collection's table
-        if ( !psHashRemove( mdTable, key ) ) {
+        if(!psHashRemove( mdTable, key )) {
             psError( __func__, "Couldn't remove metadata item from table. Name: %s", key );
             return false;
@@ -380,5 +384,5 @@
         // Remove by index
         entry = psListGet( mdList, where );
-        if ( entry == NULL ) {
+        if(entry == NULL) {
             psError( __func__, "Couldn't find metadata item from list. Index: %d", where );
             return false;
@@ -386,5 +390,5 @@
 
         key = entry->name;
-        if ( key == NULL ) {
+        if(key == NULL) {
             psError( __func__, "Null key name not allowed. Index: %d", where );
             return false;
@@ -404,10 +408,10 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return NULL;
     }
 
-    if ( key == NULL ) {
+    if(key == NULL) {
         psError( __func__, "Null key name not allowed" );
         return NULL;
@@ -415,5 +419,5 @@
 
     entry = ( psMetadataItem* ) psHashLookup( mdTable, key );
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Could not find metadata item with given key. Key: %s", key );
         return NULL;
@@ -429,5 +433,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -435,5 +439,5 @@
 
     entry = ( psMetadataItem* ) psListGet( mdList, where );
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given index. Index: %d", where );
         return NULL;
@@ -448,5 +452,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -464,11 +468,11 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
-        psError( __func__, "Null metadata list not allowed" );
-        return NULL;
-    }
-
-    mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
+        psError( __func__, "Null metadata list not allowed" );
+        return NULL;
+    }
+
+    mdList = md->list;
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -477,6 +481,6 @@
     psListSetIterator( mdList, which );
     entry = psListGetCurrent( mdList );
-    while ( entry != NULL ) {
-        if ( !strncmp( match, entry->name, strlen( match ) ) ) {
+    while(entry != NULL) {
+        if(!strncmp( match, entry->name, strlen( match ) )) {
 
             // Match found
@@ -487,5 +491,5 @@
 
     // Match not found
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given match. Match: %s", match );
     }
@@ -500,11 +504,11 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
-        psError( __func__, "Null metadata list not allowed" );
-        return NULL;
-    }
-
-    mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
+        psError( __func__, "Null metadata list not allowed" );
+        return NULL;
+    }
+
+    mdList = md->list;
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -513,6 +517,6 @@
     psListSetIterator( mdList, which );
     entry = psListGetCurrent( mdList );
-    while ( entry != NULL ) {
-        if ( !strncmp( match, entry->name, strlen( match ) ) ) {
+    while(entry != NULL) {
+        if(!strncmp( match, entry->name, strlen( match ) )) {
 
             // Match found
@@ -523,5 +527,5 @@
 
     // Match not found
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given match. Match: %s", match );
     }
@@ -534,15 +538,15 @@
     psMetadataType type;
 
-    if ( fd == NULL ) {
+    if(fd == NULL) {
         psError( __func__, "Null file descriptor not allowed" );
         return ;
     }
 
-    if ( format == NULL ) {
+    if(format == NULL) {
         psError( __func__, "Null format not allowed" );
         return ;
     }
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psError( __func__, "Null metadata not allowed" );
         return ;
@@ -551,5 +555,5 @@
     type = metadataItem->type;
 
-    switch ( type ) {
+    switch(type) {
     case PS_META_BOOL:
         fprintf( fd, format, metadataItem->data.B );
@@ -578,5 +582,5 @@
 }
 
-psMetadata *psMetadataFReadHeader( psMetadata *output, const char *extname, int extnum, fitsfile *fd )
+psMetadata *psMetadataFReadHeader( psMetadata *output, char *extName, int extNum, fitsfile *fd )
 {
     bool tempBool;
@@ -587,5 +591,4 @@
     char keyComment[ FITS_LINE_SIZE ];
     char fitsErr[ MAX_STRING_LENGTH ];
-    char* tempExtname = NULL;
     int i;
     int hduType = 0;
@@ -595,64 +598,49 @@
     psMetadataType metadataItemType;
 
-    if ( fd == NULL ) {
+    if(fd == NULL) {
         psError( __func__, "Null FITS file descriptor not allowed" );
         return NULL;
     }
 
-    if ( extname == NULL && extnum == 0 ) {
-        psError( __func__, "Null extname AND extnum = 0 not allowed" );
-        return NULL;
-    } else if ( extname && extnum ) {
-        psError( __func__, "Both extname AND extnum arguments should not have values." );
+    if(extName == NULL && extNum == 0) {
+        psError( __func__, "Null extName and extNum = 0 not allowed" );
+        return NULL;
+    } else if(extName && extNum) {
+        psError( __func__, "Both extName and extNum arguments should not have non zero values." );
         return NULL;
     }
 
     // Allocate metadata if user didn't
-    if ( output == NULL ) {
+    if(output == NULL) {
         output = psMetadataAlloc();
     }
 
     // Move to user designated HDU number or HDU name in FITS file. HDU numbers starts at one.
-    if ( extname == NULL ) {
-        if ( fits_movabs_hdu( fd, extnum, &hduType, &status ) != 0 ) {
+    if(extName != NULL) {
+        if(fits_movnam_hdu( fd, ANY_HDU, extName, 0, &status ) != 0) {
+            FITS_ERROR("FITS error while locating header %s: %s", extName);
+        }
+    } else {
+        if(fits_movabs_hdu( fd, extNum, &hduType, &status ) != 0) {
+            FITS_ERROR("FITS error while locating header %d: %s", extNum);
+        }
+    }
+
+    // Get number of key names
+    if(fits_get_hdrpos( fd, &numKeys, &keyNum, &status ) != 0) {
+        FITS_ERROR("FITS error while reading key %d: %s", keyNum);
+    }
+
+    // Get each key name. Keywords start at one.
+    for(i = 1; i <= numKeys; i++) {
+        if(fits_read_keyn( fd, i, keyName, keyValue, keyComment, &status ) != 0) {
+            FITS_ERROR("FITS error while reading key %d: %s", keyNum);
+        }
+        if(fits_get_keytype( keyValue, &keyType, &status ) != 0) {
             fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while locating header: %s", fitsErr );
-            status = 0;
-            return output;
-        }
-    } else if ( extnum > 0 ) {
-        tempExtname = ( char* ) extname;
-        if ( fits_movnam_hdu( fd, ANY_HDU, tempExtname, 0, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while locating header: %s", fitsErr );
-            status = 0;
-            return output;
-        }
-    }
-
-    // Get number of key names
-    if ( fits_get_hdrpos( fd, &numKeys, &keyNum, &status ) != 0 ) {
-        fits_get_errstatus( status, fitsErr );
-        psError( __func__, "FITS error while reading keys: %s", fitsErr );
-        status = 0;
-        return output;
-    }
-
-    // Get each key name. Keywords start at one.
-    for ( i = 1; i <= numKeys; i++ ) {
-        if ( fits_read_keyn( fd, i, keyName, keyValue, keyComment, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while reading key number %d: %s", i, fitsErr );
-            status = 0;
-            return output;
-        }
-        if ( fits_get_keytype( keyValue, &keyType, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            if ( status != VALUE_UNDEFINED ) {
-                psError( __func__, "FITS error while determining key type: %s", fitsErr );
-                status = 0;
-                return output;
+            if(status != VALUE_UNDEFINED) {
+                FITS_ERROR("FITS error while determining key %d type: %s", keyNum);
             } else {
-                // Some keywords are still valid even though they don't have a type or value, like COMMENTS
+                // Some keywords are still valid even though they don't have a type, like COMMENTS and HISTORY
                 keyType = 'C';
                 status = 0;
@@ -660,21 +648,21 @@
         }
 
-        switch ( keyType ) {
+        switch(keyType) {
         case 'I':
             metadataItemType = PS_META_S32;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, atoi( keyValue ) );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi( keyValue ) );
             break;
         case 'F':
             metadataItemType = PS_META_F64;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, atof( keyValue ) );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof( keyValue ) );
             break;
         case 'C':
             metadataItemType = PS_META_STR;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, keyValue );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue );
             break;
         case 'L':
             metadataItemType = PS_META_BOOL;
             tempBool = ( keyValue[ 0 ] == 'T' ) ? 1 : 0;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, tempBool );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool );
             break;
         case 'U':
@@ -685,6 +673,7 @@
         }
 
-        if ( !success ) {
+        if(!success) {
             psError( __func__, "Failed to add metadata item. Name: %s", keyName );
+            return output;
         }
     }
Index: /trunk/psLib/src/collections/psMetadata.h
===================================================================
--- /trunk/psLib/src/collections/psMetadata.h	(revision 1393)
+++ /trunk/psLib/src/collections/psMetadata.h	(revision 1394)
@@ -10,6 +10,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.14 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-08-05 19:38:51 $
+*  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-08-05 20:55:22 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -251,10 +251,11 @@
     FILE *fd,                                       ///< Pointer to file to write metadata item.
     const char *format,                             ///< Format to print metadata item.
-    const psMetadataItem *restrict metadataItem ///< Metadata item to print.
+    const psMetadataItem *restrict metadataItem     ///< Metadata item to print.
 );
 
 /** Read metadata header.
  *
- * Read a metadata header from file. If the file is not found, an error is reported.
+ * Read a metadata header from file. If the file is not found, an error is reported. This file is currently
+ * unimplemented.
  *
  * @return psMetadata*: Pointer metadata.
@@ -262,7 +263,7 @@
 psMetadata *psMetadataReadHeader(
     psMetadata *output,                     ///< Resulting metadata from read.
-    const char *extname,                    ///< File name extension string.
+    char *extname,                          ///< File name extension string.
     int extnum,                             ///< File name extension number. Starts at 1.
-    const char *filename                ///< Name of file to read.
+    char *filename                          ///< Name of file to read.
 );
 
@@ -275,7 +276,7 @@
 psMetadata *psMetadataFReadHeader(
     psMetadata *output,                     ///< Resulting metadata from read.
-    const char *extname,                    ///< File name extension string.
-    int extnum,                             ///< File name extension number.
-    fitsfile *fd                           ///< Pointer to file to read.
+    char *extName,                          ///< File name extension string.
+    int extNum,                             ///< File name extension number.
+    fitsfile *fd                            ///< Pointer to file to read.
 );
 /// @}
Index: /trunk/psLib/src/types/psMetadata.c
===================================================================
--- /trunk/psLib/src/types/psMetadata.c	(revision 1393)
+++ /trunk/psLib/src/types/psMetadata.c	(revision 1394)
@@ -11,6 +11,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-08-05 19:38:51 $
+*  @version $Revision: 1.11 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-08-05 20:55:16 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -39,9 +39,13 @@
 /******************************************************************************/
 
-/** Maximum length of string */
-#define MAX_STRING_LENGTH 1024
-
-/** Maximum length of FITS line */
-#define FITS_LINE_SIZE 80
+#define FITS_ERROR(STRING,PS_ERROR)                                                                          \
+fits_get_errstatus(status, fitsErr);                                                                     \
+psError( __func__, STRING, PS_ERROR, fitsErr);                                                           \
+status = 0;                                                                                              \
+if(fits_close_file(fd, &status) != 0) {                                                                  \
+    fits_get_errstatus(status, fitsErr);                                                                 \
+    psError( __func__, "FITS error while closing file: ", fitsErr);                                      \
+}                                                                                                        \
+return output;
 
 /******************************************************************************/
@@ -72,5 +76,5 @@
     type = metadataItem->type;
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         return ;
     }
@@ -80,10 +84,10 @@
     psFree( metadataItem->items );
 
-    if ( type == PS_META_STR ||
+    if(type == PS_META_STR ||
             type == PS_META_IMG ||
             type == PS_META_JPEG ||
             type == PS_META_PNG ||
             type == PS_META_ASTROM ||
-            type == PS_META_UNKNOWN ) {
+            type == PS_META_UNKNOWN) {
         psFree( metadataItem->data.V );
     }
@@ -92,5 +96,5 @@
 static void metadataFree( psMetadata *metadata )
 {
-    if ( metadata == NULL ) {
+    if(metadata == NULL) {
         return ;
     }
@@ -124,5 +128,5 @@
     psMetadataItem * metadataItem = NULL;
 
-    if ( name == NULL ) {
+    if(name == NULL) {
         psError( __func__, "Null value for string not allowed" );
         return NULL;
@@ -131,5 +135,5 @@
     // Allocate metadata item
     metadataItem = ( psMetadataItem * ) psAlloc( sizeof( psMetadataItem ) );
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psAbort( __func__, "Failed to allocate memory" );
     }
@@ -140,5 +144,5 @@
     // Allocate and set metadata item comment
     metadataItem->comment = ( char * ) psAlloc( sizeof( char ) * MAX_STRING_LENGTH );
-    if ( comment == NULL ) {
+    if(comment == NULL) {
         // Per SDRS, null isn't allowed, must use "" instead
         strncpy( metadataItem->comment, "", MAX_STRING_LENGTH );
@@ -154,5 +158,5 @@
 
     // Set metadata item value
-    switch ( type ) {
+    switch(type) {
     case PS_META_BOOL:
         metadataItem->data.B = ( bool ) va_arg( argPtr, int );
@@ -197,5 +201,5 @@
     // Allocate metadata
     metadata = ( psMetadata * ) psAlloc( sizeof( psMetadata ) );
-    if ( metadata == NULL ) {
+    if(metadata == NULL) {
         psAbort( __func__, "Failed to allocate metadata" );
     }
@@ -206,10 +210,10 @@
     // Allocate metadata's internal containers
     list = ( psList * ) psListAlloc( NULL );
-    if ( list == NULL ) {
+    if(list == NULL) {
         psAbort( __func__, "Failed to allocate list" );
     }
 
     table = ( psHash * ) psHashAlloc( 10 );
-    if ( table == NULL ) {
+    if(table == NULL) {
         psAbort( __func__, "Failed to allocate table" );
     }
@@ -229,10 +233,10 @@
     psMetadataType type = PS_META_ITEM_SET;
 
-    if ( md == NULL ) {
+    if(md == NULL) {
         psError( __func__, "Null metadata collection not allowed" );
         return false;
     }
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psError( __func__, "Null metadata item not allowed" );
         return false;
@@ -242,5 +246,5 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return false;
@@ -248,5 +252,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -254,5 +258,5 @@
 
     key = metadataItem->name;
-    if ( key == NULL ) {
+    if(key == NULL) {
         psError( __func__, "Null key item not allowed" );
         return false;
@@ -261,14 +265,14 @@
     // Check if key is already in table
     value = ( psMetadataItem* ) psHashLookup( mdTable, key );
-    if ( value != NULL && type != PS_META_ITEM_SET ) {
+    if(value != NULL && type != PS_META_ITEM_SET) {
 
         // The key was found and the new metadata item is a leaf node (its type isn't PS_META_ITEM_SET), so
         // add the new metadata item to hash as a child of the existing metadata item folder node.
-        if ( !psListAdd( value->items, metadataItem, where ) ) {
+        if(!psListAdd( value->items, metadataItem, where )) {
             psError( __func__, "Couldn't add metadata item to items list. Name: %s",
                      metadataItem->name );
             return false;
         }
-    } else if ( value != NULL ) {
+    } else if(value != NULL) {
 
         // The key was found and the new metadata item is a folder node. Don't add new metadata item, since
@@ -280,5 +284,5 @@
 
         // Duplicate key not found. Add new metadata item to metadata collection's hash
-        if ( !psHashAdd( mdTable, key, metadataItem ) ) {
+        if(!psHashAdd( mdTable, key, metadataItem )) {
             psError( __func__, "Couldn't add metadata item to metadata collection table. Name: %s",
                      metadataItem->name );
@@ -288,5 +292,5 @@
 
     // Add all items to metadata collection's list, even if they have the same metadata item names
-    if ( !psListAdd( md->list, metadataItem, where ) ) {
+    if(!psListAdd( md->list, metadataItem, where )) {
         psError( __func__, "Couldn't add metadata item to metadata collection list. Name: %s",
                  metadataItem->name );
@@ -307,5 +311,5 @@
     va_end( argPtr );
 
-    if ( !psMetadataAddItem( md, where, metadataItem ) ) {
+    if(!psMetadataAddItem( md, where, metadataItem )) {
         psError( __func__, "Couldn't add metadata item to metadata collection list. Name: %s",
                  metadataItem->name );
@@ -329,5 +333,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -335,5 +339,5 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return false;
@@ -341,9 +345,9 @@
 
     // Select removal by key or index
-    if ( key != NULL ) {
+    if(key != NULL) {
 
         // Remove by key name
         entry = ( psMetadataItem* ) psHashLookup( mdTable, key );
-        if ( entry == NULL ) {
+        if(entry == NULL) {
             psError( __func__, "Couldn't find metadata item remove. Name: %s", key );
             return false;
@@ -351,11 +355,11 @@
 
         numChildren = entry->items->size;
-        if ( entry->type == PS_META_ITEM_SET && numChildren > 0 ) {
+        if(entry->type == PS_META_ITEM_SET && numChildren > 0) {
 
             // Table entry has children. Entry and children must be removed from metadata collection's list
             psListSetIterator( mdList, PS_LIST_HEAD );
             entryChild = psListGetCurrent( mdList );
-            while ( entryChild != NULL ) {
-                if ( !psListRemove( entry->items, entryChild, PS_LIST_UNKNOWN ) ) {
+            while(entryChild != NULL) {
+                if(!psListRemove( entry->items, entryChild, PS_LIST_UNKNOWN )) {
                     psError( __func__, "Couldn't remove metadata item from list. Name: %s", key );
                     return false;
@@ -366,5 +370,5 @@
 
         // Remove entry from metadata collection's list
-        if ( !psListRemove( mdList, entry, PS_LIST_UNKNOWN ) ) {
+        if(!psListRemove( mdList, entry, PS_LIST_UNKNOWN )) {
             psError( __func__, "Couldn't remove metadata item from list. Name: %s", key );
             return false;
@@ -372,5 +376,5 @@
 
         // Remove entry from metadata collection's table
-        if ( !psHashRemove( mdTable, key ) ) {
+        if(!psHashRemove( mdTable, key )) {
             psError( __func__, "Couldn't remove metadata item from table. Name: %s", key );
             return false;
@@ -380,5 +384,5 @@
         // Remove by index
         entry = psListGet( mdList, where );
-        if ( entry == NULL ) {
+        if(entry == NULL) {
             psError( __func__, "Couldn't find metadata item from list. Index: %d", where );
             return false;
@@ -386,5 +390,5 @@
 
         key = entry->name;
-        if ( key == NULL ) {
+        if(key == NULL) {
             psError( __func__, "Null key name not allowed. Index: %d", where );
             return false;
@@ -404,10 +408,10 @@
 
     mdTable = md->table;
-    if ( mdTable == NULL ) {
+    if(mdTable == NULL) {
         psError( __func__, "Null metadata table not allowed" );
         return NULL;
     }
 
-    if ( key == NULL ) {
+    if(key == NULL) {
         psError( __func__, "Null key name not allowed" );
         return NULL;
@@ -415,5 +419,5 @@
 
     entry = ( psMetadataItem* ) psHashLookup( mdTable, key );
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Could not find metadata item with given key. Key: %s", key );
         return NULL;
@@ -429,5 +433,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -435,5 +439,5 @@
 
     entry = ( psMetadataItem* ) psListGet( mdList, where );
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given index. Index: %d", where );
         return NULL;
@@ -448,5 +452,5 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return false;
@@ -464,11 +468,11 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
-        psError( __func__, "Null metadata list not allowed" );
-        return NULL;
-    }
-
-    mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
+        psError( __func__, "Null metadata list not allowed" );
+        return NULL;
+    }
+
+    mdList = md->list;
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -477,6 +481,6 @@
     psListSetIterator( mdList, which );
     entry = psListGetCurrent( mdList );
-    while ( entry != NULL ) {
-        if ( !strncmp( match, entry->name, strlen( match ) ) ) {
+    while(entry != NULL) {
+        if(!strncmp( match, entry->name, strlen( match ) )) {
 
             // Match found
@@ -487,5 +491,5 @@
 
     // Match not found
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given match. Match: %s", match );
     }
@@ -500,11 +504,11 @@
 
     mdList = md->list;
-    if ( mdList == NULL ) {
-        psError( __func__, "Null metadata list not allowed" );
-        return NULL;
-    }
-
-    mdList = md->list;
-    if ( mdList == NULL ) {
+    if(mdList == NULL) {
+        psError( __func__, "Null metadata list not allowed" );
+        return NULL;
+    }
+
+    mdList = md->list;
+    if(mdList == NULL) {
         psError( __func__, "Null metadata list not allowed" );
         return NULL;
@@ -513,6 +517,6 @@
     psListSetIterator( mdList, which );
     entry = psListGetCurrent( mdList );
-    while ( entry != NULL ) {
-        if ( !strncmp( match, entry->name, strlen( match ) ) ) {
+    while(entry != NULL) {
+        if(!strncmp( match, entry->name, strlen( match ) )) {
 
             // Match found
@@ -523,5 +527,5 @@
 
     // Match not found
-    if ( entry == NULL ) {
+    if(entry == NULL) {
         psError( __func__, "Couldn't find metadata item with given match. Match: %s", match );
     }
@@ -534,15 +538,15 @@
     psMetadataType type;
 
-    if ( fd == NULL ) {
+    if(fd == NULL) {
         psError( __func__, "Null file descriptor not allowed" );
         return ;
     }
 
-    if ( format == NULL ) {
+    if(format == NULL) {
         psError( __func__, "Null format not allowed" );
         return ;
     }
 
-    if ( metadataItem == NULL ) {
+    if(metadataItem == NULL) {
         psError( __func__, "Null metadata not allowed" );
         return ;
@@ -551,5 +555,5 @@
     type = metadataItem->type;
 
-    switch ( type ) {
+    switch(type) {
     case PS_META_BOOL:
         fprintf( fd, format, metadataItem->data.B );
@@ -578,5 +582,5 @@
 }
 
-psMetadata *psMetadataFReadHeader( psMetadata *output, const char *extname, int extnum, fitsfile *fd )
+psMetadata *psMetadataFReadHeader( psMetadata *output, char *extName, int extNum, fitsfile *fd )
 {
     bool tempBool;
@@ -587,5 +591,4 @@
     char keyComment[ FITS_LINE_SIZE ];
     char fitsErr[ MAX_STRING_LENGTH ];
-    char* tempExtname = NULL;
     int i;
     int hduType = 0;
@@ -595,64 +598,49 @@
     psMetadataType metadataItemType;
 
-    if ( fd == NULL ) {
+    if(fd == NULL) {
         psError( __func__, "Null FITS file descriptor not allowed" );
         return NULL;
     }
 
-    if ( extname == NULL && extnum == 0 ) {
-        psError( __func__, "Null extname AND extnum = 0 not allowed" );
-        return NULL;
-    } else if ( extname && extnum ) {
-        psError( __func__, "Both extname AND extnum arguments should not have values." );
+    if(extName == NULL && extNum == 0) {
+        psError( __func__, "Null extName and extNum = 0 not allowed" );
+        return NULL;
+    } else if(extName && extNum) {
+        psError( __func__, "Both extName and extNum arguments should not have non zero values." );
         return NULL;
     }
 
     // Allocate metadata if user didn't
-    if ( output == NULL ) {
+    if(output == NULL) {
         output = psMetadataAlloc();
     }
 
     // Move to user designated HDU number or HDU name in FITS file. HDU numbers starts at one.
-    if ( extname == NULL ) {
-        if ( fits_movabs_hdu( fd, extnum, &hduType, &status ) != 0 ) {
+    if(extName != NULL) {
+        if(fits_movnam_hdu( fd, ANY_HDU, extName, 0, &status ) != 0) {
+            FITS_ERROR("FITS error while locating header %s: %s", extName);
+        }
+    } else {
+        if(fits_movabs_hdu( fd, extNum, &hduType, &status ) != 0) {
+            FITS_ERROR("FITS error while locating header %d: %s", extNum);
+        }
+    }
+
+    // Get number of key names
+    if(fits_get_hdrpos( fd, &numKeys, &keyNum, &status ) != 0) {
+        FITS_ERROR("FITS error while reading key %d: %s", keyNum);
+    }
+
+    // Get each key name. Keywords start at one.
+    for(i = 1; i <= numKeys; i++) {
+        if(fits_read_keyn( fd, i, keyName, keyValue, keyComment, &status ) != 0) {
+            FITS_ERROR("FITS error while reading key %d: %s", keyNum);
+        }
+        if(fits_get_keytype( keyValue, &keyType, &status ) != 0) {
             fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while locating header: %s", fitsErr );
-            status = 0;
-            return output;
-        }
-    } else if ( extnum > 0 ) {
-        tempExtname = ( char* ) extname;
-        if ( fits_movnam_hdu( fd, ANY_HDU, tempExtname, 0, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while locating header: %s", fitsErr );
-            status = 0;
-            return output;
-        }
-    }
-
-    // Get number of key names
-    if ( fits_get_hdrpos( fd, &numKeys, &keyNum, &status ) != 0 ) {
-        fits_get_errstatus( status, fitsErr );
-        psError( __func__, "FITS error while reading keys: %s", fitsErr );
-        status = 0;
-        return output;
-    }
-
-    // Get each key name. Keywords start at one.
-    for ( i = 1; i <= numKeys; i++ ) {
-        if ( fits_read_keyn( fd, i, keyName, keyValue, keyComment, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            psError( __func__, "FITS error while reading key number %d: %s", i, fitsErr );
-            status = 0;
-            return output;
-        }
-        if ( fits_get_keytype( keyValue, &keyType, &status ) != 0 ) {
-            fits_get_errstatus( status, fitsErr );
-            if ( status != VALUE_UNDEFINED ) {
-                psError( __func__, "FITS error while determining key type: %s", fitsErr );
-                status = 0;
-                return output;
+            if(status != VALUE_UNDEFINED) {
+                FITS_ERROR("FITS error while determining key %d type: %s", keyNum);
             } else {
-                // Some keywords are still valid even though they don't have a type or value, like COMMENTS
+                // Some keywords are still valid even though they don't have a type, like COMMENTS and HISTORY
                 keyType = 'C';
                 status = 0;
@@ -660,21 +648,21 @@
         }
 
-        switch ( keyType ) {
+        switch(keyType) {
         case 'I':
             metadataItemType = PS_META_S32;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, atoi( keyValue ) );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi( keyValue ) );
             break;
         case 'F':
             metadataItemType = PS_META_F64;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, atof( keyValue ) );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof( keyValue ) );
             break;
         case 'C':
             metadataItemType = PS_META_STR;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, keyValue );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue );
             break;
         case 'L':
             metadataItemType = PS_META_BOOL;
             tempBool = ( keyValue[ 0 ] == 'T' ) ? 1 : 0;
-            success = psMetadataAdd( output, PS_LIST_HEAD, keyName, metadataItemType, keyComment, tempBool );
+            success = psMetadataAdd( output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool );
             break;
         case 'U':
@@ -685,6 +673,7 @@
         }
 
-        if ( !success ) {
+        if(!success) {
             psError( __func__, "Failed to add metadata item. Name: %s", keyName );
+            return output;
         }
     }
Index: /trunk/psLib/src/types/psMetadata.h
===================================================================
--- /trunk/psLib/src/types/psMetadata.h	(revision 1393)
+++ /trunk/psLib/src/types/psMetadata.h	(revision 1394)
@@ -10,6 +10,6 @@
 *  @author Ross Harman, MHPCC
 *
-*  @version $Revision: 1.14 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2004-08-05 19:38:51 $
+*  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
+*  @date $Date: 2004-08-05 20:55:22 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -251,10 +251,11 @@
     FILE *fd,                                       ///< Pointer to file to write metadata item.
     const char *format,                             ///< Format to print metadata item.
-    const psMetadataItem *restrict metadataItem ///< Metadata item to print.
+    const psMetadataItem *restrict metadataItem     ///< Metadata item to print.
 );
 
 /** Read metadata header.
  *
- * Read a metadata header from file. If the file is not found, an error is reported.
+ * Read a metadata header from file. If the file is not found, an error is reported. This file is currently
+ * unimplemented.
  *
  * @return psMetadata*: Pointer metadata.
@@ -262,7 +263,7 @@
 psMetadata *psMetadataReadHeader(
     psMetadata *output,                     ///< Resulting metadata from read.
-    const char *extname,                    ///< File name extension string.
+    char *extname,                          ///< File name extension string.
     int extnum,                             ///< File name extension number. Starts at 1.
-    const char *filename                ///< Name of file to read.
+    char *filename                          ///< Name of file to read.
 );
 
@@ -275,7 +276,7 @@
 psMetadata *psMetadataFReadHeader(
     psMetadata *output,                     ///< Resulting metadata from read.
-    const char *extname,                    ///< File name extension string.
-    int extnum,                             ///< File name extension number.
-    fitsfile *fd                           ///< Pointer to file to read.
+    char *extName,                          ///< File name extension string.
+    int extNum,                             ///< File name extension number.
+    fitsfile *fd                            ///< Pointer to file to read.
 );
 /// @}
Index: /trunk/psLib/test/astronomy/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psMetadata_01.c	(revision 1393)
+++ /trunk/psLib/test/astronomy/tst_psMetadata_01.c	(revision 1394)
@@ -7,20 +7,14 @@
 *     Test B - Read 2nd hdr from complex FITS file
 *     Test C - Read named hdr from complex FITS file
-*     D
-*     E
-*     F
-*     G
-*     H
-*     I
-*     J
-*     K
-*     L
-*     M
-*     N
+*     Test D - Attempt to use null file descriptor
+*     Test E - Attempt to use two null inputs
+*     Test F - Attempt to use bad extNum/
+*     Test G - Attempt to use bad extNameTest
+*     Test H - Free psMetadataData
 *
 *  @author  Ross Harman, MHPCC
 *
-*  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2004-08-05 02:25:23 $
+*  @version $Revision: 1.3 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2004-08-05 20:55:34 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -31,25 +25,4 @@
 #include "psTest.h"
 #include <string.h>
-
-void printListInt(psList* list)
-{
-    int* data = NULL;
-    bool first = true;
-
-    psListSetIterator(list,PS_LIST_HEAD);
-    data = psListGetCurrent(list);
-
-    while ( data != NULL ) {
-        if (!first) {
-            printf(", %d",*(int*)data);
-        } else {
-            printf("%d",*(int*)data);
-            first = false;
-        }
-        data = psListGetNext(list);
-    }
-
-    printf(".\n");
-}
 
 static void printMetadata(psMetadata *metadata)
@@ -187,5 +160,5 @@
 
 
-    //Test C - Read named hdr from complex FITS file
+    // Test C - Read named hdr from complex FITS file
     printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
     fits_open_file(&fptr, "header_2.fits", READONLY, &status);
@@ -199,5 +172,33 @@
 
 
-    // Test - Free psMetadata
+    // Test D - Attempt to use null file descriptor
+    printNegativeTestHeader(stdout,"psMetadata", "Test D - Attempt to use null file descriptor",
+                            "Null FITS file descriptor not allowed", 0);
+    psMetadataFReadHeader(NULL, NULL, 1, NULL);
+    printFooter(stdout, "psMetadata", "Test D - Attempt to use null file descriptor", true);
+
+
+    // Test E - Attempt to use two null inputs
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to use two null inputs",
+                            "Null extName and extNum = 0 not allowed", 0);
+    psMetadataFReadHeader(NULL, NULL, 0, fptr);
+    printFooter(stdout, "psMetadata", "Test E - Attempt to use two null inputs", true);
+
+
+    // Test F - Attempt to use bad extNum
+    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to use bad extNum",
+                            "FITS error while locating header 22: tried to move past end of file", 0);
+    psMetadataFReadHeader(metadata1, NULL, 22, fptr);
+    printFooter(stdout, "psMetadata", "Test F - Attempt to use bad extNum", true);
+
+
+    // Test G - Attempt to use bad extName
+    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to use bad extName",
+                            "FITS error while locating header AARGH: illegal HDU number", 0);
+    psMetadataFReadHeader(metadata1, "AARGH", 0, fptr);
+    printFooter(stdout, "psMetadata", "Test F - Attempt to use bad extName", true);
+
+
+    // Test H - Free psMetadata
     printPositiveTestHeader(stdout, "psMetadata", "Test - Free psMetadata");
     psFree(metadata1);
Index: /trunk/psLib/test/collections/tst_psMetadata_01.c
===================================================================
--- /trunk/psLib/test/collections/tst_psMetadata_01.c	(revision 1393)
+++ /trunk/psLib/test/collections/tst_psMetadata_01.c	(revision 1394)
@@ -7,20 +7,14 @@
 *     Test B - Read 2nd hdr from complex FITS file
 *     Test C - Read named hdr from complex FITS file
-*     D
-*     E
-*     F
-*     G
-*     H
-*     I
-*     J
-*     K
-*     L
-*     M
-*     N
+*     Test D - Attempt to use null file descriptor
+*     Test E - Attempt to use two null inputs
+*     Test F - Attempt to use bad extNum/
+*     Test G - Attempt to use bad extNameTest
+*     Test H - Free psMetadataData
 *
 *  @author  Ross Harman, MHPCC
 *
-*  @version $Revision: 1.2 $  $Name: not supported by cvs2svn $
-*  @date  $Date: 2004-08-05 02:25:23 $
+*  @version $Revision: 1.3 $  $Name: not supported by cvs2svn $
+*  @date  $Date: 2004-08-05 20:55:34 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -31,25 +25,4 @@
 #include "psTest.h"
 #include <string.h>
-
-void printListInt(psList* list)
-{
-    int* data = NULL;
-    bool first = true;
-
-    psListSetIterator(list,PS_LIST_HEAD);
-    data = psListGetCurrent(list);
-
-    while ( data != NULL ) {
-        if (!first) {
-            printf(", %d",*(int*)data);
-        } else {
-            printf("%d",*(int*)data);
-            first = false;
-        }
-        data = psListGetNext(list);
-    }
-
-    printf(".\n");
-}
 
 static void printMetadata(psMetadata *metadata)
@@ -187,5 +160,5 @@
 
 
-    //Test C - Read named hdr from complex FITS file
+    // Test C - Read named hdr from complex FITS file
     printPositiveTestHeader(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file");
     fits_open_file(&fptr, "header_2.fits", READONLY, &status);
@@ -199,5 +172,33 @@
 
 
-    // Test - Free psMetadata
+    // Test D - Attempt to use null file descriptor
+    printNegativeTestHeader(stdout,"psMetadata", "Test D - Attempt to use null file descriptor",
+                            "Null FITS file descriptor not allowed", 0);
+    psMetadataFReadHeader(NULL, NULL, 1, NULL);
+    printFooter(stdout, "psMetadata", "Test D - Attempt to use null file descriptor", true);
+
+
+    // Test E - Attempt to use two null inputs
+    printNegativeTestHeader(stdout,"psMetadata", "Test E - Attempt to use two null inputs",
+                            "Null extName and extNum = 0 not allowed", 0);
+    psMetadataFReadHeader(NULL, NULL, 0, fptr);
+    printFooter(stdout, "psMetadata", "Test E - Attempt to use two null inputs", true);
+
+
+    // Test F - Attempt to use bad extNum
+    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to use bad extNum",
+                            "FITS error while locating header 22: tried to move past end of file", 0);
+    psMetadataFReadHeader(metadata1, NULL, 22, fptr);
+    printFooter(stdout, "psMetadata", "Test F - Attempt to use bad extNum", true);
+
+
+    // Test G - Attempt to use bad extName
+    printNegativeTestHeader(stdout,"psMetadata", "Test F - Attempt to use bad extName",
+                            "FITS error while locating header AARGH: illegal HDU number", 0);
+    psMetadataFReadHeader(metadata1, "AARGH", 0, fptr);
+    printFooter(stdout, "psMetadata", "Test F - Attempt to use bad extName", true);
+
+
+    // Test H - Free psMetadata
     printPositiveTestHeader(stdout, "psMetadata", "Test - Free psMetadata");
     psFree(metadata1);
