From 5335c91f4a10081ef8b04a6d47403c0efc064647 Mon Sep 17 00:00:00 2001
From: scuri <scuri>
Date: Thu, 10 Sep 2009 17:33:34 +0000
Subject: # Fixed: RAW format initialization.

---
 src/im_fileraw.cpp    | 38 ++++++++++++++++++++------------------
 src/im_format_raw.cpp | 20 ++++++++++++++++----
 2 files changed, 36 insertions(+), 22 deletions(-)

(limited to 'src')

diff --git a/src/im_fileraw.cpp b/src/im_fileraw.cpp
index 530b6c9..91be826 100644
--- a/src/im_fileraw.cpp
+++ b/src/im_fileraw.cpp
@@ -2,7 +2,7 @@
  * \brief RAW File Format Open/New Functions
  *
  * See Copyright Notice in im_lib.h
- * $Id: im_fileraw.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $
+ * $Id: im_fileraw.cpp,v 1.3 2009/09/10 17:33:35 scuri Exp $
  */
 
 #include "im.h"
@@ -21,44 +21,46 @@ imFile* imFileOpenRaw(const char* file_name, int *error)
 {
   assert(file_name);
 
-  imFileFormatBase* iformat = imFormatInitRAW();
-  *error = iformat->Open(file_name);
+  imFormat* iformat = imFormatInitRAW();
+  imFileFormatBase* ifileformat = iformat->Create();
+  *error = ifileformat->Open(file_name);
   if (*error)
   {
-    delete iformat;
+    delete ifileformat;
     return NULL;
   }
 
-  imFileClear(iformat);
+  imFileClear(ifileformat);
 
-  iformat->attrib_table = new imAttribTable(599);
+  ifileformat->attrib_table = new imAttribTable(599);
 
-  iformat->counter = imCounterBegin(file_name);
+  ifileformat->counter = imCounterBegin(file_name);
 
-  return iformat;
+  return ifileformat;
 }
 
 imFile* imFileNewRaw(const char* file_name, int *error)
 {
   assert(file_name);
 
-  imFileFormatBase* iformat = imFormatInitRAW();
-  *error = iformat->New(file_name);
+  imFormat* iformat = imFormatInitRAW();
+  imFileFormatBase* ifileformat = iformat->Create();
+  *error = ifileformat->New(file_name);
   if (*error) 
   {
-    delete iformat;
+    delete ifileformat;
     return NULL;
   }
    
-  imFileClear(iformat);
+  imFileClear(ifileformat);
 
-  iformat->is_new = 1;
-  iformat->image_count = 0;
-  iformat->compression[0] = 0;
+  ifileformat->is_new = 1;
+  ifileformat->image_count = 0;
+  ifileformat->compression[0] = 0;
 
-  iformat->attrib_table = new imAttribTable(101);
+  ifileformat->attrib_table = new imAttribTable(101);
 
-  iformat->counter = imCounterBegin(file_name);
+  ifileformat->counter = imCounterBegin(file_name);
 
-  return iformat;
+  return ifileformat;
 }
diff --git a/src/im_format_raw.cpp b/src/im_format_raw.cpp
index 5f8d2e5..6a6a7fd 100644
--- a/src/im_format_raw.cpp
+++ b/src/im_format_raw.cpp
@@ -2,7 +2,7 @@
  * \brief RAW File Format
  *
  * See Copyright Notice in im_lib.h
- * $Id: im_format_raw.cpp,v 1.3 2009/07/10 18:39:37 scuri Exp $
+ * $Id: im_format_raw.cpp,v 1.4 2009/09/10 17:33:35 scuri Exp $
  */
 
 #include "im_format.h"
@@ -58,11 +58,23 @@ public:
   int CanWrite(const char* compression, int color_mode, int data_type) const;
 };
 
+static imFormat* raw_format = NULL;
 
-imFileFormatBase* imFormatInitRAW(void)
+void imFormatFinishRAW(void)
 {
-  imFormatRAW iformat;
-  return iformat.Create();
+  if (raw_format)
+  {
+    delete raw_format;
+    raw_format = NULL;
+  }
+}
+
+imFormat* imFormatInitRAW(void)
+{
+  if (!raw_format)
+    raw_format = new imFormatRAW();
+
+  return raw_format;
 }
 
 int imFileFormatRAW::Open(const char* file_name)
-- 
cgit v1.2.3