Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorperepujal <perepujal>2010-06-01 22:12:53 (GMT)
committer perepujal <perepujal>2010-06-01 22:12:53 (GMT)
commitcd4918b2d3f125f519d064c519355c1a60e86bf5 (patch)
treeb3f721b93e9857821ddd7709183ce63c8a750136
parent8e286dde8370cf3587a8e564791d89a06ed8c015 (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.c43
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
{