xref: /reactos/win32ss/drivers/font/ftfd/rosglue.c (revision 8a978a17)
1 /*
2  * COPYRIGHT:         See COPYING in the top level directory
3  * PROJECT:           FreeType implementation for ReactOS
4  * PURPOSE:           Glue functions between FreeType
5  * FILE:              win32ss/drivers/font/ftfd/rosglue.c
6  * PROGRAMMER:        Ge van Geldorp (ge@gse.nl)
7  * NOTES:
8  */
9 
10 #include "ftfd.h"
11 
12 #define NDEBUG
13 #include <debug.h>
14 
15 #define TAG_FREETYPE  'PYTF'
16 
17 /*
18  * First some generic routines
19  */
20 
21 ULONG
22 DbgPrint(IN PCCH Format, IN ...)
23 {
24     va_list args;
25 
26     va_start(args, Format);
27     EngDebugPrint("ft2: ", (PCHAR)Format, args);
28     va_end(args);
29     return 0;
30 }
31 
32 /*
33  * Memory allocation
34  *
35  * Because of realloc, we need to keep track of the size of the allocated
36  * buffer (need to copy the old contents to the new buffer). So, allocate
37  * extra space for a size_t, store the allocated size in there and return
38  * the address just past it as the allocated buffer.
39  */
40 
41 void *
42 malloc(size_t Size)
43 {
44     void *Object;
45 
46     Object = EngAllocMem(0, sizeof(size_t) + Size, TAG_FREETYPE);
47     if (Object != NULL)
48     {
49         *((size_t *)Object) = Size;
50         Object = (void *)((size_t *)Object + 1);
51     }
52 
53     return Object;
54 }
55 
56 void *
57 realloc(void *Object, size_t Size)
58 {
59     void *NewObject;
60     size_t CopySize;
61 
62     NewObject = EngAllocMem(0, sizeof(size_t) + Size, TAG_FREETYPE);
63     if (NewObject != NULL)
64     {
65         *((size_t *)NewObject) = Size;
66         NewObject = (void *)((size_t *)NewObject + 1);
67         CopySize = *((size_t *)Object - 1);
68         if (Size < CopySize)
69         {
70             CopySize = Size;
71         }
72         memcpy(NewObject, Object, CopySize);
73         EngFreeMem((size_t *)Object - 1);
74     }
75 
76     return NewObject;
77 }
78 
79 void
80 free(void *Object)
81 {
82     if (Object != NULL)
83     {
84         EngFreeMem((size_t *)Object - 1);
85     }
86 }
87 
88 /*
89  * File I/O
90  *
91  * This is easy, we don't want FreeType to do any I/O. So return an
92  * error on each I/O attempt. Note that errno is not being set, it is
93  * not used by FreeType.
94  */
95 
96 FILE *
97 fopen(const char *FileName, const char *Mode)
98 {
99     DPRINT1("Freetype tries to open file %s\n", FileName);
100     return NULL;
101 }
102 
103 int
104 fseek(FILE *Stream, long Offset, int Origin)
105 {
106     DPRINT1("Doubleplus ungood: freetype shouldn't fseek!\n");
107     return -1;
108 }
109 
110 long
111 ftell(FILE *Stream)
112 {
113     DPRINT1("Doubleplus ungood: freetype shouldn't ftell!\n");
114     return -1;
115 }
116 
117 size_t
118 fread(void *Buffer, size_t Size, size_t Count, FILE *Stream)
119 {
120     DPRINT1("Doubleplus ungood: freetype shouldn't fread!\n");
121     return 0;
122 }
123 
124 int
125 fclose(FILE *Stream)
126 {
127     DPRINT1("Doubleplus ungood: freetype shouldn't fclose!\n");
128     return EOF;
129 }
130