1 /****************************************************************************
2  *
3  * ftstdlib.h
4  *
5  *   ANSI-specific library and header configuration file (specification
6  *   only).
7  *
8  * Copyright (C) 2002-2021 by
9  * David Turner, Robert Wilhelm, and Werner Lemberg.
10  *
11  * This file is part of the FreeType project, and may only be used,
12  * modified, and distributed under the terms of the FreeType project
13  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
14  * this file you indicate that you have read the license and
15  * understand and accept it fully.
16  *
17  */
18 
19 
20   /**************************************************************************
21    *
22    * This file is used to group all `#includes` to the ANSI~C library that
23    * FreeType normally requires.  It also defines macros to rename the
24    * standard functions within the FreeType source code.
25    *
26    * Load a file which defines `FTSTDLIB_H_` before this one to override it.
27    *
28    */
29 
30 
31 #ifndef FTSTDLIB_H_
32 #define FTSTDLIB_H_
33 
34 
35 #include <stddef.h>
36 
37 #define ft_ptrdiff_t  ptrdiff_t
38 
39 
40   /**************************************************************************
41    *
42    *                          integer limits
43    *
44    * `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of
45    * `int` and `long` in bytes at compile-time.  So far, this works for all
46    * platforms the library has been tested on.  We also check `ULLONG_MAX`
47    * to see whether we can use 64-bit `long long` later on.
48    *
49    * Note that on the extremely rare platforms that do not provide integer
50    * types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where
51    * `int` is 36~bits), we do not make any guarantee about the correct
52    * behaviour of FreeType~2 with all fonts.
53    *
54    * In these cases, `ftconfig.h` will refuse to compile anyway with a
55    * message like 'couldn't find 32-bit type' or something similar.
56    *
57    */
58 
59 
60 #include <limits.h>
61 
62 #define FT_CHAR_BIT    CHAR_BIT
63 #define FT_USHORT_MAX  USHRT_MAX
64 #define FT_INT_MAX     INT_MAX
65 #define FT_INT_MIN     INT_MIN
66 #define FT_UINT_MAX    UINT_MAX
67 #define FT_LONG_MIN    LONG_MIN
68 #define FT_LONG_MAX    LONG_MAX
69 #define FT_ULONG_MAX   ULONG_MAX
70 #ifdef LLONG_MAX
71 #define FT_LLONG_MAX   LLONG_MAX
72 #endif
73 #ifdef LLONG_MIN
74 #define FT_LLONG_MIN   LLONG_MIN
75 #endif
76 #ifdef ULLONG_MAX
77 #define FT_ULLONG_MAX  ULLONG_MAX
78 #endif
79 
80 
81   /**************************************************************************
82    *
83    *                character and string processing
84    *
85    */
86 
87 
88 #include <string.h>
89 
90 #define ft_memchr   memchr
91 #define ft_memcmp   memcmp
92 #define ft_memcpy   memcpy
93 #define ft_memmove  memmove
94 #define ft_memset   memset
95 #define ft_strcat   strcat
96 #define ft_strcmp   strcmp
97 #define ft_strcpy   strcpy
98 #define ft_strlen   strlen
99 #define ft_strncmp  strncmp
100 #define ft_strncpy  strncpy
101 #define ft_strrchr  strrchr
102 #define ft_strstr   strstr
103 
104 
105   /**************************************************************************
106    *
107    *                          file handling
108    *
109    */
110 
111 
112 #include <stdio.h>
113 
114 #define FT_FILE     FILE
115 #define ft_fclose   fclose
116 #define ft_fopen    fopen
117 #define ft_fread    fread
118 #define ft_fseek    fseek
119 #define ft_ftell    ftell
120 #define ft_sprintf  sprintf
121 
122 
123   /**************************************************************************
124    *
125    *                            sorting
126    *
127    */
128 
129 
130 #include <stdlib.h>
131 
132 #define ft_qsort  qsort
133 
134 
135   /**************************************************************************
136    *
137    *                       memory allocation
138    *
139    */
140 
141 
142 #define ft_scalloc   calloc
143 #define ft_sfree     free
144 #define ft_smalloc   malloc
145 #define ft_srealloc  realloc
146 
147 
148   /**************************************************************************
149    *
150    *                         miscellaneous
151    *
152    */
153 
154 
155 #define ft_strtol  strtol
156 #define ft_getenv  getenv
157 
158 
159   /**************************************************************************
160    *
161    *                        execution control
162    *
163    */
164 
165 
166 #include <setjmp.h>
167 
168 #define ft_jmp_buf     jmp_buf  /* note: this cannot be a typedef since  */
169                                 /*       `jmp_buf` is defined as a macro */
170                                 /*       on certain platforms            */
171 
172 #define ft_longjmp     longjmp
173 #define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
174 
175 
176   /* The following is only used for debugging purposes, i.e., if   */
177   /* `FT_DEBUG_LEVEL_ERROR` or `FT_DEBUG_LEVEL_TRACE` are defined. */
178 
179 #include <stdarg.h>
180 
181 
182 #endif /* FTSTDLIB_H_ */
183 
184 
185 /* END */
186