From 9643a8df1c03f52debda93a06af431e3737110c2 Mon Sep 17 00:00:00 2001 From: Pere Pujal i Carabantes Date: Tue, 1 Jun 2010 22:12:53 +0000 Subject: [PATCH] An alternative to fmemopen using a temporary file on the disk. Still needs to be called for the OSes that lacks it --- src/tuxpaint.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/tuxpaint.c b/src/tuxpaint.c index 7712168fa..c7545b21d 100644 --- a/src/tuxpaint.c +++ b/src/tuxpaint.c @@ -499,6 +499,49 @@ extern WrapperData macosx; ) #endif +/* #define fmemopen_alternative */ /* Uncomment this to test the fmemopen alternative in systems were fmemopen exists */ + +#ifdef fmemopen_alternative +#undef fmemopen + +FILE * my_fmemopen(unsigned char * data, size_t size, const char * mode); + +FILE * my_fmemopen(unsigned char * data, size_t size, const char * mode) +{ + unsigned int i; + char *fname; + FILE * fi; + +#ifndef WIN32 + fname = get_fname("tmpfile", DIR_SAVE); +#else + fname = get_temp_fname("tmpfile"); +#endif + + + fi = fopen(fname, "w"); + if (fi == NULL) + { + free(fname); + return(NULL); + } + + for (i = 0; i < size; i++) + { + fwrite(data, 1, 1, fi); + data ++; + } + + fclose(fi); + fi = fopen(fname, mode); + free(fname); + return(fi); +} + +#define fmemopen my_fmemopen + +#endif + enum {