Index: /branches/eam_branches/ipp-20150616/Ohana/src/libfits/header/F_write_H.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libfits/header/F_write_H.c	(revision 38504)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libfits/header/F_write_H.c	(revision 38505)
@@ -5,19 +5,8 @@
 int gfits_write_header (char *filename, Header *header) {
 
-  FILE *f;
-  off_t Nbytes;
-  int status;
-  
-  status = TRUE;
+  FILE *f = fopen (filename, "w");
+  if (!f) return (FALSE);
 
-  f = fopen (filename, "w");
-  if (f == (FILE *) NULL) return (FALSE);
-
-  Nbytes = fwrite (header[0].buffer, sizeof(char), header[0].datasize, f);
-
-  if (Nbytes != header[0].datasize) {
-    status = FALSE;
-  }
-
+  int status = gfits_fwrite_header (f, header);
   fclose (f);
 
@@ -29,22 +18,26 @@
 
   off_t Nbytes; 
-  int status;
-  
-  status = TRUE;
+
+# ifdef OHANA_MEMORY  
+  { // check memory before writing:
+    // memblock of supplied pointer
+    OhanaMemblock *myBlock = (OhanaMemblock *) header[0].buffer - 1;
+    myAssert (myBlock->startblock == OHANA_MEMMAGIC, "bad memory");
+    myAssert (myBlock->endblock == OHANA_MEMMAGIC, "bad memory");
+    myAssert (myBlock->size >= header[0].datasize, "overflow");
+  }
+# endif
 
   Nbytes = fwrite (header[0].buffer, sizeof(char), header[0].datasize, f);
-
-  if (Nbytes != header[0].datasize) {
-    status = FALSE;
+  if (Nbytes != header[0].datasize) { 
+    perror ("fwrite: "); 
+    return FALSE; 
   }
-
-  return (status);
+  return TRUE;
 }	
 
 
 int gfits_fwrite_header (FILE *f, Header *header) {
-
-  int status;
-  status = gfits_save_header (f, header);
+  int status = gfits_save_header (f, header);
   return (status);
 }
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libfits/matrix/F_write_M.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libfits/matrix/F_write_M.c	(revision 38504)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libfits/matrix/F_write_M.c	(revision 38505)
@@ -35,4 +35,7 @@
   else 
     nbytes = FT_RECORD_SIZE * ((off_t) (matrix[0].datasize / FT_RECORD_SIZE));
+
+  // fprintf (stderr, "write matrix: %d bytes (%d datasize)\n", (int) nbytes, (int) matrix[0].datasize);
+  if (nbytes == 0) return TRUE;
 
 # define DOSWAP(A,B) { char tmp = A; A = B; B = tmp; }
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libfits/table/F_write_T.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libfits/table/F_write_T.c	(revision 38504)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libfits/table/F_write_T.c	(revision 38505)
@@ -5,13 +5,8 @@
 int gfits_write_table (char *filename, FTable *table) {
   
-  FILE *f;
-  int status;
-  
-  status = TRUE;
-  
-  f = fopen (filename, "a+");
+  FILE *f = fopen (filename, "a+");
   if (f == (FILE *) NULL) return (FALSE);
   
-  status = fseeko (f, 0LL, SEEK_END);  /* write table to end of file! */
+  int status = fseeko (f, 0LL, SEEK_END);  /* write table to end of file! */
   if (status) { perror ("fseeko: "); return (FALSE);  }
   status = gfits_fwrite_table (f, table);
@@ -25,7 +20,20 @@
   
   off_t Nbytes;
-  
+
+# ifdef OHANA_MEMORY  
+  { // check memory before writing:
+    // memblock of supplied pointer
+    OhanaMemblock *myBlock = (OhanaMemblock *) table[0].buffer - 1;
+    myAssert (myBlock->startblock == OHANA_MEMMAGIC, "bad memory");
+    myAssert (myBlock->endblock == OHANA_MEMMAGIC, "bad memory");
+    myAssert (myBlock->size >= table[0].datasize, "overflow");
+  }
+# endif
+
   Nbytes = fwrite (table[0].buffer, sizeof(char), table[0].datasize, f);
-  if (Nbytes != table[0].datasize) { perror ("fwrite: "); return (FALSE);  }
+  if (Nbytes != table[0].datasize) { 
+    perror ("fwrite: "); 
+    return (FALSE);  
+  }
   return (TRUE);
 }	
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libfits/table/F_write_TH.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libfits/table/F_write_TH.c	(revision 38504)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libfits/table/F_write_TH.c	(revision 38505)
@@ -5,13 +5,8 @@
 int gfits_write_Theader (char *filename, Header *header) {
   
-  FILE *f;
-  int status;
+  FILE *f = fopen (filename, "a+");
+  if (!f) return (FALSE);
   
-  status = TRUE;
-  
-  f = fopen (filename, "a+");
-  if (f == (FILE *) NULL) return (FALSE);
-  
-  status = fseeko (f, 0LL, SEEK_END);  /* write header to end of file! */
+  int status = fseeko (f, 0LL, SEEK_END);  /* write header to end of file! */
   if (status) { perror ("fseeko: "); return (FALSE);  }
   status = gfits_fwrite_Theader (f, header);
@@ -26,6 +21,19 @@
   off_t Nbytes;
   
+# ifdef OHANA_MEMORY  
+  { 
+    // memblock of supplied pointer
+    OhanaMemblock *myBlock = (OhanaMemblock *) header[0].buffer - 1;
+    myAssert (myBlock->startblock == OHANA_MEMMAGIC, "bad memory");
+    myAssert (myBlock->endblock == OHANA_MEMMAGIC, "bad memory");
+    myAssert (myBlock->size >= header[0].datasize, "overflow");
+  }
+# endif
+
   Nbytes = fwrite (header[0].buffer, sizeof(char), header[0].datasize, f);
-  if (Nbytes != header[0].datasize) { perror ("fwrite: "); return (FALSE);  }
+  if (Nbytes != header[0].datasize) { 
+    perror ("fwrite: "); 
+    return (FALSE);  
+  }
 
   return (TRUE);
