--- cairo-1.12.0/util/cairo-missing/cairo-missing.h.orig 2012-02-02 01:48:15.000000000 +0100 +++ cairo-1.12.0/util/cairo-missing/cairo-missing.h 2012-03-25 12:56:29.970335651 +0200 @@ -37,7 +37,7 @@ #include #include -#ifdef _WIN32 +#if defined(_WIN32) && !defined(__MINGW32__) #define WIN32_LEAN_AND_MEAN #include --- cairo-1.12.0/test/any2ppm.c.orig 2012-02-29 13:10:30.000000000 +0100 +++ cairo-1.12.0/test/any2ppm.c 2012-03-25 13:20:49.717047188 +0200 @@ -120,7 +120,7 @@ } static int -_write (int fd, +_cairo_write (int fd, char *buf, int maxlen, int buflen, const unsigned char *src, int srclen) { @@ -204,7 +204,7 @@ switch ((int) format) { case CAIRO_FORMAT_ARGB32: - len = _write (fd, + len = _cairo_write (fd, buf, sizeof (buf), len, (unsigned char *) row, 4 * width); break; @@ -215,13 +215,13 @@ rgb[0] = (p & 0xff0000) >> 16; rgb[1] = (p & 0x00ff00) >> 8; rgb[2] = (p & 0x0000ff) >> 0; - len = _write (fd, + len = _cairo_write (fd, buf, sizeof (buf), len, rgb, 3); } break; case CAIRO_FORMAT_A8: - len = _write (fd, + len = _cairo_write (fd, buf, sizeof (buf), len, (unsigned char *) row, width); break; --- cairo-1.12.0/boilerplate/cairo-boilerplate-win32-printing.c.orig 2012-02-29 13:10:30.000000000 +0100 +++ cairo-1.12.0/boilerplate/cairo-boilerplate-win32-printing.c 2012-03-25 17:00:32.410822070 +0200 @@ -41,6 +41,7 @@ #include #include +#include #include #if !defined(POSTSCRIPT_IDENTIFY) @@ -59,8 +60,35 @@ # define FEATURESETTING_PSLEVEL 0x0002 #endif -cairo_status_t -_cairo_win32_print_gdi_error (const char *context); +/* private function copied from cairo-win32-surface.c */ +static cairo_status_t +_cairo_win32_print_gdi_error (const char *context) +{ + void *lpMsgBuf; + DWORD last_error = GetLastError (); + + if (!FormatMessageW (FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + last_error, + MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR) &lpMsgBuf, + 0, NULL)) { + fprintf (stderr, "%s: Unknown GDI error", context); + } else { + fprintf (stderr, "%s: %S", context, (wchar_t *)lpMsgBuf); + + LocalFree (lpMsgBuf); + } + + fflush (stderr); + + /* We should switch off of last_status, but we'd either return + * CAIRO_STATUS_NO_MEMORY or CAIRO_STATUS_UNKNOWN_ERROR and there + * is no CAIRO_STATUS_UNKNOWN_ERROR. + */ + return CAIRO_STATUS_NO_MEMORY; +} static cairo_user_data_key_t win32_closure_key;