diff options
Diffstat (limited to 'src/im_format.cpp')
| -rw-r--r-- | src/im_format.cpp | 38 | 
1 files changed, 24 insertions, 14 deletions
diff --git a/src/im_format.cpp b/src/im_format.cpp index be9892c..d389743 100644 --- a/src/im_format.cpp +++ b/src/im_format.cpp @@ -2,7 +2,7 @@   * \brief File Format Access   *   * See Copyright Notice in im_lib.h - * $Id: im_format.cpp,v 1.1 2008/10/17 06:10:16 scuri Exp $ + * $Id: im_format.cpp,v 1.2 2008/12/03 15:45:34 scuri Exp $   */ @@ -163,7 +163,7 @@ static char* utlFileGetExt(const char *file_name)    return file_ext;  } -imFormat* imFormatOpen(const char* file_name, int *error) +imFileFormatBase* imFileFormatBaseOpen(const char* file_name, int *error)  {    int i; @@ -191,18 +191,20 @@ imFormat* imFormatOpen(const char* file_name, int *error)        {          ext_mark[i] = 1; // Mark this format to avoid testing it again in the next phase -        *error = iformat->Open(file_name);                                                +        imFileFormatBase* ifileformat = iformat->Create(); +        *error = ifileformat->Open(file_name);                                                         if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT)  // Error situation that must abort          {                                                      // Only IM_ERR_FORMAT is a valid error here            free(extension);            delete [] ext_mark; +          delete ifileformat;            return NULL;          }          else if (*error == IM_ERR_NONE) // Sucessfully oppened the file          {            free(extension);            delete [] ext_mark; -          return iformat; +          return ifileformat;          }        }      } @@ -218,17 +220,18 @@ imFormat* imFormatOpen(const char* file_name, int *error)      if (!ext_mark[i])      {        imFormat* iformat = iFormatList[i]; - -      *error = iformat->Open(file_name); +      imFileFormatBase* ifileformat = iformat->Create(); +      *error = ifileformat->Open(file_name);        if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT)  // Error situation that must abort        {                                                      // Only IM_ERR_FORMAT is a valid error here          delete [] ext_mark; +        delete ifileformat;          return NULL;        }        else if (*error == IM_ERR_NONE) // Sucessfully oppened the file        {          delete [] ext_mark; -        return iformat; +        return ifileformat;        }      }    } @@ -238,7 +241,7 @@ imFormat* imFormatOpen(const char* file_name, int *error)    return NULL;  } -imFormat* imFormatOpenAs(const char* file_name, const char* format, int *error) +imFileFormatBase* imFileFormatBaseOpenAs(const char* file_name, const char* format, int *error)  {    assert(file_name);    assert(format); @@ -257,17 +260,21 @@ imFormat* imFormatOpenAs(const char* file_name, const char* format, int *error)      return NULL;    } -  *error = iformat->Open(file_name); +  imFileFormatBase* ifileformat = iformat->Create(); +  *error = ifileformat->Open(file_name);    if (*error != IM_ERR_NONE && *error != IM_ERR_FORMAT)  // Error situation that must abort +  { +    delete ifileformat;      return NULL; +  }    else if (*error == IM_ERR_NONE) // Sucessfully oppened the file -    return iformat; +    return ifileformat;    *error = IM_ERR_FORMAT;    return NULL;  } -imFormat* imFormatNew(const char* file_name, const char* format, int *error) +imFileFormatBase* imFileFormatBaseNew(const char* file_name, const char* format, int *error)  {    assert(file_name);    assert(format); @@ -280,10 +287,13 @@ imFormat* imFormatNew(const char* file_name, const char* format, int *error)      return NULL;    } -  *error = iformat->New(file_name); +  imFileFormatBase* ifileformat = iformat->Create(); +  *error = ifileformat->New(file_name);    if (*error) +  { +    delete ifileformat;      return NULL; +  } -  return iformat; +  return ifileformat;  } -  | 
