]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/xpmdecod.cpp
PyCrust updates
[wxWidgets.git] / src / common / xpmdecod.cpp
index 434e8dedf911c50dedfa93ea836e0bb20d4e54be..6f593fc98923b4a45c587ac8de5eb425df41b438 100644 (file)
@@ -114,6 +114,10 @@ license is as follows:
 #include "wx/intl.h"
 #include <string.h>
 
 #include "wx/intl.h"
 #include <string.h>
 
+#ifdef __VISUALC__
+#include <ctype.h>
+#endif
+
 #include "wx/xpmdecod.h"
 
 #if wxUSE_STREAMS
 #include "wx/xpmdecod.h"
 
 #if wxUSE_STREAMS
@@ -130,18 +134,22 @@ bool wxXPMDecoder::CanRead(wxInputStream& stream)
 wxImage wxXPMDecoder::ReadFile(wxInputStream& stream)
 {
     size_t length = stream.GetSize();
 wxImage wxXPMDecoder::ReadFile(wxInputStream& stream)
 {
     size_t length = stream.GetSize();
-    wxCHECK_MSG(length != 0, wxNullImage, wxT("Cannot read XPM from stream of unknown size"));
+    wxCHECK_MSG( length != 0, wxNullImage,
+                 wxT("Cannot read XPM from stream of unknown size") );
 
 
-    char *xpm_buffer = new char[length];
-    char *p, *q;
-    size_t i;
+    // use a smart buffer to be sure to free memory even when we return on
+    // error
+    wxCharBuffer buffer(length);
 
 
+    char *xpm_buffer = (char *)buffer.data();
     if ( stream.Read(xpm_buffer, length).LastError() == wxSTREAM_READ_ERROR )
         return wxNullImage;
     if ( stream.Read(xpm_buffer, length).LastError() == wxSTREAM_READ_ERROR )
         return wxNullImage;
+    xpm_buffer[length] = '\0';
 
     /*
      *  Remove comments from the file:
      */
 
     /*
      *  Remove comments from the file:
      */
+    char *p, *q;
     for (p = xpm_buffer; *p != '\0'; p++)
     {
         if ( (*p == '"') || (*p == '\'') )
     for (p = xpm_buffer; *p != '\0'; p++)
     {
         if ( (*p == '"') || (*p == '\'') )
@@ -175,7 +183,7 @@ wxImage wxXPMDecoder::ReadFile(wxInputStream& stream)
     /*
      *  Remove unquoted characters:
      */
     /*
      *  Remove unquoted characters:
      */
-    i = 0;
+    size_t i = 0;
     for (p = xpm_buffer; *p != '\0'; p++)
     {
         if ( *p != '"' )
     for (p = xpm_buffer; *p != '\0'; p++)
     {
         if ( *p != '"' )
@@ -227,12 +235,12 @@ wxImage wxXPMDecoder::ReadFile(wxInputStream& stream)
      */
     wxImage img = ReadData(xpm_lines);
 
      */
     wxImage img = ReadData(xpm_lines);
 
-    delete[] xpm_buffer;
 #ifdef __WIN16__
     delete[] (char**) xpm_lines;
 #else
     delete[] xpm_lines;
 #endif
 #ifdef __WIN16__
     delete[] (char**) xpm_lines;
 #else
     delete[] xpm_lines;
 #endif
+
     return img;
 }
 #endif // wxUSE_STREAMS
     return img;
 }
 #endif // wxUSE_STREAMS