Index: trunk/psLib/src/fits/psFitsTable.c
===================================================================
--- trunk/psLib/src/fits/psFitsTable.c	(revision 7980)
+++ trunk/psLib/src/fits/psFitsTable.c	(revision 7981)
@@ -7,6 +7,6 @@
  *  @author Robert DeSonia, MHPCC
  *
- *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2006-07-26 02:19:47 $
+ *  @version $Revision: 1.17 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2006-07-26 02:59:58 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -456,4 +456,5 @@
         return 'A';
     default:
+        psError(PS_ERR_UNKNOWN, true, "Unknown type: %x\n", type);
         return '?';
     }
@@ -571,5 +572,9 @@
         columnNames->data[i] = psMemIncrRefCounter(colSpecItem->name);
         psString colType = NULL;        // The column type
-        psStringAppend(&colType, "%d%c", spec->size, getTForm(spec->type));
+        if (spec->type == PS_DATA_VECTOR) {
+            psStringAppend(&colType, "%d%c", spec->size, getTForm(spec->vectorType));
+        } else {
+            psStringAppend(&colType, "%d%c", spec->size, getTForm(spec->type));
+        }
         columnTypes->data[i] = colType;
     }
@@ -612,7 +617,19 @@
     psFree(columnTypes);
 
+    if (status != 0) {
+        char fitsErr[MAX_STRING_LENGTH];
+        fits_get_errstatus(status, fitsErr);
+        psError(PS_ERR_LOCATION_INVALID, true, "Unable to create FITS table with %d columns and %d rows:",
+                numColumns, table->n, fitsErr);
+        psFree(colSpecsIter);
+        psFree(colSpecs);
+        return false;
+    }
+
     // Write header
     if (header && !psFitsWriteHeader(fits, header)) {
         psError(PS_ERR_IO, false, "Unable to write FITS header.\n");
+        psFree(colSpecsIter);
+        psFree(colSpecs);
         return false;
     }
@@ -646,43 +663,54 @@
                            &status);
             psFree(columnData);
-            continue;
-        }
-
-        switch (spec->type) {
-        case PS_DATA_STRING: {
-                psArray *strings = psArrayAlloc(table->n); // Array of strings
-                strings->n = table->n;
-                for (long i = 0; i < table->n; i++) {
-                    psMetadata *row = table->data[i]; // The row of interest
-                    strings->data[i] = psMemIncrRefCounter(psMetadataLookupStr(NULL, row, colSpecItem->name));
+        } else {
+            switch (spec->type) {
+            case PS_DATA_STRING: {
+                    psArray *strings = psArrayAlloc(table->n); // Array of strings
+                    strings->n = table->n;
+                    for (long i = 0; i < table->n; i++) {
+                        psMetadata *row = table->data[i]; // The row of interest
+                        strings->data[i] = psMemIncrRefCounter(psMetadataLookupStr(NULL, row,
+                                                               colSpecItem->name));
+                    }
+                    fits_write_col_str(fits->fd, colNum, 1, 1, table->n, (char**)strings->data, &status);
+                    psFree(strings);
+                    break;
                 }
-                fits_write_col_str(fits->fd, colNum, 1, 1, table->n, (char**)strings->data, &status);
-                psFree(strings);
-                break;
+            case PS_DATA_VECTOR: {
+                    psVector *columnData = psVectorAlloc(spec->size * table->n, spec->vectorType);
+                    psVectorInit(columnData, 0);
+                    size_t dataSize = PSELEMTYPE_SIZEOF(spec->vectorType); // Size of data, in bytes
+                    for (long i = 0; i < table->n; i++) {
+                        psMetadata *row = table->data[i]; // The row of interest
+                        psMetadataItem* dataItem = psMetadataLookup(row, colSpecItem->name);
+                        if (dataItem->type != PS_DATA_VECTOR) {
+                            // Just in case --- get a zero instead of some weird result
+                            continue;
+                        }
+                        psVector *vector = dataItem->data.V;
+                        memcpy(&columnData->data.U8[i * dataSize], vector->data.U8, dataSize);
+                    }
+
+                    int fitsDataType;           // Data type for cfitsio
+                    p_psFitsTypeToCfitsio(spec->vectorType, NULL, NULL, &fitsDataType);
+                    fits_write_col(fits->fd, fitsDataType, colNum, 1, 1, table->n * spec->size,
+                                   columnData->data.U8, &status);
+                    psFree(columnData);
+                    break;
+                }
+            default:
+                psAbort(__func__, "Should never get here.\n");
             }
-        case PS_DATA_VECTOR: {
-                psVector *columnData = psVectorAlloc(spec->size * table->n, spec->vectorType);
-                psVectorInit(columnData, 0);
-                size_t dataSize = PSELEMTYPE_SIZEOF(spec->vectorType); // Size of data, in bytes
-                for (long i = 0; i < table->n; i++) {
-                    psMetadata *row = table->data[i]; // The row of interest
-                    psMetadataItem* dataItem = psMetadataLookup(row, colSpecItem->name);
-                    if (dataItem->type != PS_DATA_VECTOR) {
-                        // Just in case --- get a zero instead of some weird result
-                        continue;
-                    }
-                    psVector *vector = dataItem->data.V;
-                    memcpy(&columnData->data.U8[i * dataSize], vector->data.U8, dataSize);
-                }
-
-                int fitsDataType;           // Data type for cfitsio
-                p_psFitsTypeToCfitsio(spec->vectorType, NULL, NULL, &fitsDataType);
-                fits_write_col(fits->fd, fitsDataType, colNum, 1, 1, table->n * spec->size, columnData->data.U8,
-                               &status);
-                psFree(columnData);
-                break;
-            }
-        default:
-            psAbort(__func__, "Should never get here.\n");
+        }
+
+        // Check error status from writing column
+        if (status != 0) {
+            char fitsErr[MAX_STRING_LENGTH];
+            fits_get_errstatus(status, fitsErr);
+            psError(PS_ERR_LOCATION_INVALID, true, "Unable to write column %d of FITS table:",
+                    colNum, fitsErr);
+            psFree(colSpecsIter);
+            psFree(colSpecs);
+            return false;
         }
     }
