Cleaned up a couple of problems when DEBUG is defined.

Enabled fmemopen_alternative on Windows.
Rearranged calls to rsvg_init()/rsvg_term() so that they are only called
once at startup and shutdown. This was causing segfaults when opening SVG
files and apparently it's not just Tux Paint:

http://0pointer.de/blog/projects/beware-of-rsvg-term.html

Slightly hysterical, but a quick Google search reveals other projects with
the same problem/solution.

Builds and runs on Windows again.
This commit is contained in:
John Popplewell 2010-12-17 15:43:53 +00:00
parent ef7d94dff9
commit 74c460d3f2

View file

@ -501,7 +501,7 @@ extern WrapperData macosx;
//#define fmemopen_alternative */ /* Uncomment this to test the fmemopen alternative in systems were fmemopen exists */
#if defined (__HAIKU__) // Haiku needs it, at least for now
#if defined (__HAIKU__) || defined (WIN32) // Haiku and MINGW/MSYS need it, at least for now
#define fmemopen_alternative
#endif
@ -12404,7 +12404,13 @@ static void cleanup(void)
TTF_Quit();
SDL_Quit();
/* Call this once only, at exit */
#if !defined(NOSVG) && !defined(OLD_SVG)
#ifdef DEBUG
printf("rsvg_term()\n"); fflush(stdout);
#endif
rsvg_term();
#endif
}
@ -16535,7 +16541,7 @@ static int charsize(Uint16 c)
str[0] = c;
str[1] = '\0';
TTF_SizeUNICODE(getfonthandle(cur_font), str, &w, &h);
TTF_SizeUNICODE(getfonthandle(cur_font)->ttf_font, str, &w, &h);
return w;
}
@ -17071,8 +17077,6 @@ static SDL_Surface * load_svg(char * file)
/* Create an RSVG Handle from the SVG file: */
rsvg_init();
gerr = NULL;
rsvg_handle = rsvg_handle_new_from_file(file, &gerr);
@ -17221,8 +17225,6 @@ static SDL_Surface * load_svg(char * file)
free(image);
cairo_destroy(cr);
rsvg_term();
return(sdl_surface);
}
@ -22545,6 +22547,14 @@ static void setup(void)
signal(SIGPIPE, signal_handler);
#endif
/* Call this once */
#if !defined(NOSVG) && !defined(OLD_SVG)
#ifdef DEBUG
printf("rsvg_init()\n"); fflush(stdout);
#endif
rsvg_init();
#endif
}
@ -23591,10 +23601,6 @@ int button(int id, int x, int y)
if (texttool_len < (sizeof(texttool_str) / sizeof(wchar_t)) - 1)
{
int old_cursor_textwidth = cursor_textwidth;
#ifdef DEBUG
wprintf(L" key = <%c>\nunicode = <%lc> 0x%04x %d\n\n",
key_down, key_unicode, key_unicode, key_unicode);
#endif
texttool_str[texttool_len++] = *im_cp;
texttool_str[texttool_len] = 0;