diff options
author | perepujal <perepujal> | 2010-06-01 22:12:53 (GMT) |
---|---|---|
committer | perepujal <perepujal> | 2010-06-01 22:12:53 (GMT) |
commit | cd4918b2d3f125f519d064c519355c1a60e86bf5 (patch) | |
tree | b3f721b93e9857821ddd7709183ce63c8a750136 | |
parent | 8e286dde8370cf3587a8e564791d89a06ed8c015 (diff) |
An alternative to fmemopen using a temporary file on the disk.
Still needs to be called for the OSes that lacks it
-rw-r--r-- | src/tuxpaint.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/tuxpaint.c b/src/tuxpaint.c index 7712168..c7545b2 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 { |