---
 src/base/ftstream.c |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 56 insertions(+), 2 deletions(-)

Index: freetype-2.3.7/src/base/ftstream.c
===================================================================
--- freetype-2.3.7.orig/src/base/ftstream.c
+++ freetype-2.3.7/src/base/ftstream.c
@@ -44,6 +44,17 @@
     stream->close  = 0;
   }
 
+  FT_BASE_DEF( void )
+  FT_New_Memory_Stream( FT_Library, FT_Byte*, FT_ULong, FT_Stream ) __attribute__((weak));
+  FT_BASE_DEF( void )
+  FT_New_Memory_Stream( FT_Library  library,
+                        FT_Byte*    base,
+                        FT_ULong    size,
+                        FT_Stream   stream )
+  { 
+    stream->memory  = library->memory;
+    FT_Stream_OpenMemory( stream, (const FT_Byte*) base, size );
+  }
 
   FT_BASE_DEF( void )
   FT_Stream_Close( FT_Stream  stream )
@@ -84,6 +95,8 @@
     return error;
   }
 
+  FT_BASE_DEF( FT_Error )
+  FT_Seek_Stream(FT_Stream, FT_ULong) __attribute__((weak, alias("FT_Stream_Seek")));
 
   FT_BASE_DEF( FT_Error )
   FT_Stream_Skip( FT_Stream  stream,
@@ -95,6 +108,8 @@
     return FT_Stream_Seek( stream, (FT_ULong)( stream->pos + distance ) );
   }
 
+  FT_BASE_DEF( FT_Error )
+  FT_Skip_Stream(FT_Stream, FT_Long) __attribute__((weak, alias("FT_Stream_Skip")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_Pos( FT_Stream  stream )
@@ -111,6 +126,8 @@
     return FT_Stream_ReadAt( stream, stream->pos, buffer, count );
   }
 
+  FT_BASE_DEF( FT_Error )
+  FT_Read_Stream( FT_Stream, FT_Byte*, FT_ULong ) __attribute__((weak, alias("FT_Stream_Read")));
 
   FT_BASE_DEF( FT_Error )
   FT_Stream_ReadAt( FT_Stream  stream,
@@ -184,6 +201,8 @@
     return read_bytes;
   }
 
+  FT_BASE_DEF( FT_Error )
+  FT_Read_Stream_At( FT_Stream, FT_ULong, FT_Byte*, FT_ULong) __attribute__((weak, alias("FT_Stream_ReadAt")));
 
   FT_BASE_DEF( FT_Error )
   FT_Stream_ExtractFrame( FT_Stream  stream,
@@ -206,7 +225,9 @@
     return error;
   }
 
-
+  FT_BASE_DEF( FT_Error )
+  FT_Extract_Frame( FT_Stream, FT_ULong, FT_Byte** ) __attribute__((weak, alias("FT_Stream_ExtractFrame")));
+ 
   FT_BASE_DEF( void )
   FT_Stream_ReleaseFrame( FT_Stream  stream,
                           FT_Byte**  pbytes )
@@ -225,6 +246,8 @@
     *pbytes = 0;
   }
 
+  FT_BASE_DEF( void )
+  FT_Release_Frame( FT_Stream, FT_Byte** ) __attribute__((weak, alias("FT_Stream_ReleaseFrame")));
 
   FT_BASE_DEF( FT_Error )
   FT_Stream_EnterFrame( FT_Stream  stream,
@@ -291,6 +314,8 @@
     return error;
   }
 
+  FT_BASE_DEF( FT_Error )
+  FT_Access_Frame( FT_Stream, FT_ULong ) __attribute__((weak, alias("FT_Stream_EnterFrame")));
 
   FT_BASE_DEF( void )
   FT_Stream_ExitFrame( FT_Stream  stream )
@@ -321,6 +346,8 @@
     stream->limit  = 0;
   }
 
+  FT_BASE_DEF( void )
+  FT_Forget_Frame( FT_Stream ) __attribute__((weak, alias("FT_Stream_ExitFrame")));
 
   FT_BASE_DEF( FT_Char )
   FT_Stream_GetChar( FT_Stream  stream )
@@ -337,6 +364,8 @@
     return result;
   }
 
+  FT_BASE_DEF( FT_Char )
+  FT_Get_Char( FT_Stream ) __attribute__((weak, alias("FT_Stream_GetChar")));
 
   FT_BASE_DEF( FT_Short )
   FT_Stream_GetShort( FT_Stream  stream )
@@ -356,6 +385,8 @@
     return result;
   }
 
+  FT_BASE_DEF( FT_Short )
+  FT_Get_Short( FT_Stream ) __attribute__((weak, alias("FT_Stream_GetShort")));
 
   FT_BASE_DEF( FT_Short )
   FT_Stream_GetShortLE( FT_Stream  stream )
@@ -375,6 +406,8 @@
     return result;
   }
 
+  FT_BASE_DEF( FT_Short )
+  FT_Get_ShortLE( FT_Stream ) __attribute__((weak, alias("FT_Stream_GetShortLE")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_GetOffset( FT_Stream  stream )
@@ -393,6 +426,8 @@
     return result;
   }
 
+  FT_BASE_DEF( FT_Long )
+  FT_Get_Offset( FT_Stream ) __attribute__((weak, alias("FT_Stream_GetOffset")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_GetLong( FT_Stream  stream )
@@ -411,6 +446,8 @@
     return result;
   }
 
+  FT_BASE_DEF( FT_Long )
+  FT_Get_Long( FT_Stream ) __attribute__((weak, alias("FT_Stream_GetLong")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_GetLongLE( FT_Stream  stream )
@@ -429,6 +466,8 @@
     return result;
   }
 
+  FT_BASE_DEF( FT_Long )
+  FT_Get_LongLE( FT_Stream ) __attribute__((weak, alias("FT_Stream_GetLongLE")));
 
   FT_BASE_DEF( FT_Char )
   FT_Stream_ReadChar( FT_Stream  stream,
@@ -465,6 +504,8 @@
     return 0;
   }
 
+  FT_BASE_DEF( FT_Char )
+  FT_Read_Char( FT_Stream, FT_Error* ) __attribute__((weak, alias("FT_Stream_ReadChar")));
 
   FT_BASE_DEF( FT_Short )
   FT_Stream_ReadShort( FT_Stream  stream,
@@ -512,6 +553,9 @@
     return 0;
   }
 
+  FT_BASE_DEF( FT_Short )
+  FT_Read_Short( FT_Stream, FT_Error* ) __attribute__((weak, alias("FT_Stream_ReadShort")));
+
 
   FT_BASE_DEF( FT_Short )
   FT_Stream_ReadShortLE( FT_Stream  stream,
@@ -559,6 +603,8 @@
     return 0;
   }
 
+  FT_BASE_DEF( FT_Short )
+  FT_Read_ShortLE( FT_Stream, FT_Error* ) __attribute__((weak, alias("FT_Stream_ReadShortLE")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_ReadOffset( FT_Stream  stream,
@@ -606,6 +652,8 @@
     return 0;
   }
 
+  FT_BASE_DEF( FT_Long )
+  FT_Read_Offset( FT_Stream, FT_Error* ) __attribute__((weak, alias("FT_Stream_ReadOffset")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_ReadLong( FT_Stream  stream,
@@ -652,6 +700,8 @@
     return 0;
   }
 
+  FT_BASE_DEF( FT_Long )
+  FT_Read_Long( FT_Stream, FT_Error* ) __attribute__((weak, alias("FT_Stream_ReadLong")));
 
   FT_BASE_DEF( FT_Long )
   FT_Stream_ReadLongLE( FT_Stream  stream,
@@ -699,6 +749,9 @@
     return 0;
   }
 
+  FT_BASE_DEF( FT_Long )
+  FT_Read_LongLE( FT_Stream, FT_Error* ) __attribute__((weak, alias("FT_Stream_ReadLongLE")));
+
 
   FT_BASE_DEF( FT_Error )
   FT_Stream_ReadFields( FT_Stream              stream,
@@ -841,5 +894,6 @@
     return error;
   }
 
-
+  FT_BASE_DEF( FT_Error )
+  FT_Read_Fields( FT_Stream, const FT_Frame_Field*, void* ) __attribute__((weak, alias("FT_Stream_ReadFields")));
 /* END */
