Merge pull request #610 from stweil/master
[openjpeg.git] / src / lib / openjpip / jpipstream_manager.c
index 8cb2a77fe16e6cab54b2f0d83e98d0861daf8da5..3929b495b1504612efd17daba7467b30028f7151 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * $Id$
  *
- * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2011, Professor Benoit Macq
+ * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2014, Professor Benoit Macq
  * Copyright (c) 2010-2011, Kaori Hagihara
  * All rights reserved.
  *
 
 Byte_t * update_JPIPstream( Byte_t *newstream, OPJ_SIZE_T newstreamlen, Byte_t *cache_stream, OPJ_SIZE_T *streamlen)
 {
-  Byte_t *stream = (Byte_t *)malloc( (*streamlen)+newstreamlen);
+  Byte_t *stream = (Byte_t *)opj_malloc( (*streamlen)+newstreamlen);
   if( *streamlen > 0)
     memcpy( stream, cache_stream, *streamlen);
   memcpy( stream+(*streamlen), newstream, newstreamlen);
   *streamlen += newstreamlen;
 
   if(cache_stream)
-    free( cache_stream);
+    opj_free( cache_stream);
   
   return stream;
 }
@@ -76,19 +76,34 @@ Byte_t * jpipstream_to_pnm( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte
   Byte_t *pnmstream;
   Byte_t *j2kstream; /* j2k or jp2 codestream */
   Byte8_t j2klen;
+  size_t retlen;
   FILE *fp;
   const char j2kfname[] = "tmp.j2k";
 
-  j2kstream = recons_j2k( msgqueue, jpipstream, csn, fw, fh, &j2klen); 
-
   fp = fopen( j2kfname, "w+b");
-  fwrite( j2kstream, j2klen, 1, fp);
-  free( j2kstream);
-  fseek( fp, 0, SEEK_SET);
+  if( !fp )
+    {
+    return NULL;
+    }
+  j2kstream = recons_j2k( msgqueue, jpipstream, csn, fw, fh, &j2klen); 
+  if( !j2kstream )
+    {
+    fclose(fp);
+    remove( j2kfname);
+    return NULL;
+    }
+
+  retlen = fwrite( j2kstream, 1, j2klen, fp);
+  opj_free( j2kstream);
+  fclose(fp);
+  if( retlen != j2klen )
+    {
+    remove( j2kfname);
+    return NULL;
+    }
 
-  pnmstream = j2k_to_pnm( fp, ihdrbox);
+  pnmstream = j2k_to_pnm( j2kfname, ihdrbox);
 
-  fclose( fp);
   remove( j2kfname);
 
   return pnmstream;
@@ -103,18 +118,18 @@ ihdrbox_param_t * get_SIZ_from_jpipstream( Byte_t *jpipstream, msgqueue_param_t
 
   j2kstream = recons_j2kmainhead( msgqueue, jpipstream, csn, &j2klen);
   if( !get_mainheader_from_j2kstream( j2kstream, &SIZ, NULL)){
-    free( j2kstream);
+    opj_free( j2kstream);
     return NULL;
   }
 
-  ihdrbox = (ihdrbox_param_t *)malloc( sizeof(ihdrbox_param_t));
+  ihdrbox = (ihdrbox_param_t *)opj_malloc( sizeof(ihdrbox_param_t));
 
   ihdrbox->width = SIZ.Xsiz;
   ihdrbox->height = SIZ.Ysiz;
   ihdrbox->nc = SIZ.Csiz;
   ihdrbox->bpc = SIZ.Ssiz[0];
   
-  free( j2kstream);
+  opj_free( j2kstream);
 
   return ihdrbox;
 }