Index: trunk/Mars/mcore/fits.h
===================================================================
--- trunk/Mars/mcore/fits.h	(revision 16418)
+++ trunk/Mars/mcore/fits.h	(revision 16424)
@@ -113,4 +113,5 @@
             size_t num;
             size_t size;
+            size_t bytes;  // num*size
             char   type;
             string unit;
@@ -346,5 +347,5 @@
                 }
 
-                const Table::Column col = { bytes, n, size, type, unit, compress};
+                const Table::Column col = { bytes, n, size, n*size, type, unit, compress};
 
                 cols[id] = col;
@@ -781,5 +782,5 @@
 
     template<size_t N>
-        void revcpy(char *dest, const char *src, int num)
+        void revcpy(char *dest, const char *src, const int &num)
     {
         const char *pend = src + num*N;
@@ -788,5 +789,5 @@
     }
 
-    virtual void MoveColumnDataToUserSpace(char* dest, const char*src, const Table::Column& c)
+    virtual void MoveColumnDataToUserSpace(char *dest, const char *src, const Table::Column& c)
     {
         // Let the compiler do some optimization by
@@ -794,8 +795,8 @@
         switch (c.size)
         {
-        case 1: memcpy   (dest, src, c.num*c.size); break;
-        case 2: revcpy<2>(dest, src, c.num);        break;
-        case 4: revcpy<4>(dest, src, c.num);        break;
-        case 8: revcpy<8>(dest, src, c.num);        break;
+        case 1: memcpy   (dest, src, c.bytes); break;
+        case 2: revcpy<2>(dest, src, c.num);   break;
+        case 4: revcpy<4>(dest, src, c.num);   break;
+        case 8: revcpy<8>(dest, src, c.num);   break;
         }
     }
@@ -873,5 +874,5 @@
             return it->second;
 
-        fGarbage.emplace_back(fTable.cols[name].size*fTable.cols[name].num);
+        fGarbage.emplace_back(fTable.cols[name].bytes);
 
         void *ptr = fGarbage.back().data();
