xref: /aosp_15_r20/external/expat/lib/expat_external.h (revision 6be67779651aebaf20f11e5663acd1ae59e93f66)
1*6be67779SAndroid Build Coastguard Worker /*
2*6be67779SAndroid Build Coastguard Worker                             __  __            _
3*6be67779SAndroid Build Coastguard Worker                          ___\ \/ /_ __   __ _| |_
4*6be67779SAndroid Build Coastguard Worker                         / _ \\  /| '_ \ / _` | __|
5*6be67779SAndroid Build Coastguard Worker                        |  __//  \| |_) | (_| | |_
6*6be67779SAndroid Build Coastguard Worker                         \___/_/\_\ .__/ \__,_|\__|
7*6be67779SAndroid Build Coastguard Worker                                  |_| XML parser
8*6be67779SAndroid Build Coastguard Worker 
9*6be67779SAndroid Build Coastguard Worker    Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
10*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2000      Clark Cooper <[email protected]>
11*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2000-2004 Fred L. Drake, Jr. <[email protected]>
12*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2001-2002 Greg Stein <[email protected]>
13*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2002-2006 Karl Waclawek <[email protected]>
14*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2016      Cristian Rodríguez <[email protected]>
15*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2016-2019 Sebastian Pipping <[email protected]>
16*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2017      Rhodri James <[email protected]>
17*6be67779SAndroid Build Coastguard Worker    Copyright (c) 2018      Yury Gribov <[email protected]>
18*6be67779SAndroid Build Coastguard Worker    Licensed under the MIT license:
19*6be67779SAndroid Build Coastguard Worker 
20*6be67779SAndroid Build Coastguard Worker    Permission is  hereby granted,  free of charge,  to any  person obtaining
21*6be67779SAndroid Build Coastguard Worker    a  copy  of  this  software   and  associated  documentation  files  (the
22*6be67779SAndroid Build Coastguard Worker    "Software"),  to  deal in  the  Software  without restriction,  including
23*6be67779SAndroid Build Coastguard Worker    without  limitation the  rights  to use,  copy,  modify, merge,  publish,
24*6be67779SAndroid Build Coastguard Worker    distribute, sublicense, and/or sell copies of the Software, and to permit
25*6be67779SAndroid Build Coastguard Worker    persons  to whom  the Software  is  furnished to  do so,  subject to  the
26*6be67779SAndroid Build Coastguard Worker    following conditions:
27*6be67779SAndroid Build Coastguard Worker 
28*6be67779SAndroid Build Coastguard Worker    The above copyright  notice and this permission notice  shall be included
29*6be67779SAndroid Build Coastguard Worker    in all copies or substantial portions of the Software.
30*6be67779SAndroid Build Coastguard Worker 
31*6be67779SAndroid Build Coastguard Worker    THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
32*6be67779SAndroid Build Coastguard Worker    EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
33*6be67779SAndroid Build Coastguard Worker    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
34*6be67779SAndroid Build Coastguard Worker    NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
35*6be67779SAndroid Build Coastguard Worker    DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
36*6be67779SAndroid Build Coastguard Worker    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
37*6be67779SAndroid Build Coastguard Worker    USE OR OTHER DEALINGS IN THE SOFTWARE.
38*6be67779SAndroid Build Coastguard Worker */
39*6be67779SAndroid Build Coastguard Worker 
40*6be67779SAndroid Build Coastguard Worker #ifndef Expat_External_INCLUDED
41*6be67779SAndroid Build Coastguard Worker #define Expat_External_INCLUDED 1
42*6be67779SAndroid Build Coastguard Worker 
43*6be67779SAndroid Build Coastguard Worker /* External API definitions */
44*6be67779SAndroid Build Coastguard Worker 
45*6be67779SAndroid Build Coastguard Worker /* Expat tries very hard to make the API boundary very specifically
46*6be67779SAndroid Build Coastguard Worker    defined.  There are two macros defined to control this boundary;
47*6be67779SAndroid Build Coastguard Worker    each of these can be defined before including this header to
48*6be67779SAndroid Build Coastguard Worker    achieve some different behavior, but doing so it not recommended or
49*6be67779SAndroid Build Coastguard Worker    tested frequently.
50*6be67779SAndroid Build Coastguard Worker 
51*6be67779SAndroid Build Coastguard Worker    XMLCALL    - The calling convention to use for all calls across the
52*6be67779SAndroid Build Coastguard Worker                 "library boundary."  This will default to cdecl, and
53*6be67779SAndroid Build Coastguard Worker                 try really hard to tell the compiler that's what we
54*6be67779SAndroid Build Coastguard Worker                 want.
55*6be67779SAndroid Build Coastguard Worker 
56*6be67779SAndroid Build Coastguard Worker    XMLIMPORT  - Whatever magic is needed to note that a function is
57*6be67779SAndroid Build Coastguard Worker                 to be imported from a dynamically loaded library
58*6be67779SAndroid Build Coastguard Worker                 (.dll, .so, or .sl, depending on your platform).
59*6be67779SAndroid Build Coastguard Worker 
60*6be67779SAndroid Build Coastguard Worker    The XMLCALL macro was added in Expat 1.95.7.  The only one which is
61*6be67779SAndroid Build Coastguard Worker    expected to be directly useful in client code is XMLCALL.
62*6be67779SAndroid Build Coastguard Worker 
63*6be67779SAndroid Build Coastguard Worker    Note that on at least some Unix versions, the Expat library must be
64*6be67779SAndroid Build Coastguard Worker    compiled with the cdecl calling convention as the default since
65*6be67779SAndroid Build Coastguard Worker    system headers may assume the cdecl convention.
66*6be67779SAndroid Build Coastguard Worker */
67*6be67779SAndroid Build Coastguard Worker #ifndef XMLCALL
68*6be67779SAndroid Build Coastguard Worker #  if defined(_MSC_VER)
69*6be67779SAndroid Build Coastguard Worker #    define XMLCALL __cdecl
70*6be67779SAndroid Build Coastguard Worker #  elif defined(__GNUC__) && defined(__i386) && ! defined(__INTEL_COMPILER)
71*6be67779SAndroid Build Coastguard Worker #    define XMLCALL __attribute__((cdecl))
72*6be67779SAndroid Build Coastguard Worker #  else
73*6be67779SAndroid Build Coastguard Worker /* For any platform which uses this definition and supports more than
74*6be67779SAndroid Build Coastguard Worker    one calling convention, we need to extend this definition to
75*6be67779SAndroid Build Coastguard Worker    declare the convention used on that platform, if it's possible to
76*6be67779SAndroid Build Coastguard Worker    do so.
77*6be67779SAndroid Build Coastguard Worker 
78*6be67779SAndroid Build Coastguard Worker    If this is the case for your platform, please file a bug report
79*6be67779SAndroid Build Coastguard Worker    with information on how to identify your platform via the C
80*6be67779SAndroid Build Coastguard Worker    pre-processor and how to specify the same calling convention as the
81*6be67779SAndroid Build Coastguard Worker    platform's malloc() implementation.
82*6be67779SAndroid Build Coastguard Worker */
83*6be67779SAndroid Build Coastguard Worker #    define XMLCALL
84*6be67779SAndroid Build Coastguard Worker #  endif
85*6be67779SAndroid Build Coastguard Worker #endif /* not defined XMLCALL */
86*6be67779SAndroid Build Coastguard Worker 
87*6be67779SAndroid Build Coastguard Worker #if ! defined(XML_STATIC) && ! defined(XMLIMPORT)
88*6be67779SAndroid Build Coastguard Worker #  ifndef XML_BUILDING_EXPAT
89*6be67779SAndroid Build Coastguard Worker /* using Expat from an application */
90*6be67779SAndroid Build Coastguard Worker 
91*6be67779SAndroid Build Coastguard Worker #    if defined(_MSC_EXTENSIONS) && ! defined(__BEOS__) && ! defined(__CYGWIN__)
92*6be67779SAndroid Build Coastguard Worker #      define XMLIMPORT __declspec(dllimport)
93*6be67779SAndroid Build Coastguard Worker #    endif
94*6be67779SAndroid Build Coastguard Worker 
95*6be67779SAndroid Build Coastguard Worker #  endif
96*6be67779SAndroid Build Coastguard Worker #endif /* not defined XML_STATIC */
97*6be67779SAndroid Build Coastguard Worker 
98*6be67779SAndroid Build Coastguard Worker #ifndef XML_ENABLE_VISIBILITY
99*6be67779SAndroid Build Coastguard Worker #  define XML_ENABLE_VISIBILITY 0
100*6be67779SAndroid Build Coastguard Worker #endif
101*6be67779SAndroid Build Coastguard Worker 
102*6be67779SAndroid Build Coastguard Worker #if ! defined(XMLIMPORT) && XML_ENABLE_VISIBILITY
103*6be67779SAndroid Build Coastguard Worker #  define XMLIMPORT __attribute__((visibility("default")))
104*6be67779SAndroid Build Coastguard Worker #endif
105*6be67779SAndroid Build Coastguard Worker 
106*6be67779SAndroid Build Coastguard Worker /* If we didn't define it above, define it away: */
107*6be67779SAndroid Build Coastguard Worker #ifndef XMLIMPORT
108*6be67779SAndroid Build Coastguard Worker #  define XMLIMPORT
109*6be67779SAndroid Build Coastguard Worker #endif
110*6be67779SAndroid Build Coastguard Worker 
111*6be67779SAndroid Build Coastguard Worker #if defined(__GNUC__)                                                          \
112*6be67779SAndroid Build Coastguard Worker     && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
113*6be67779SAndroid Build Coastguard Worker #  define XML_ATTR_MALLOC __attribute__((__malloc__))
114*6be67779SAndroid Build Coastguard Worker #else
115*6be67779SAndroid Build Coastguard Worker #  define XML_ATTR_MALLOC
116*6be67779SAndroid Build Coastguard Worker #endif
117*6be67779SAndroid Build Coastguard Worker 
118*6be67779SAndroid Build Coastguard Worker #if defined(__GNUC__)                                                          \
119*6be67779SAndroid Build Coastguard Worker     && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
120*6be67779SAndroid Build Coastguard Worker #  define XML_ATTR_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
121*6be67779SAndroid Build Coastguard Worker #else
122*6be67779SAndroid Build Coastguard Worker #  define XML_ATTR_ALLOC_SIZE(x)
123*6be67779SAndroid Build Coastguard Worker #endif
124*6be67779SAndroid Build Coastguard Worker 
125*6be67779SAndroid Build Coastguard Worker #define XMLPARSEAPI(type) XMLIMPORT type XMLCALL
126*6be67779SAndroid Build Coastguard Worker 
127*6be67779SAndroid Build Coastguard Worker #ifdef __cplusplus
128*6be67779SAndroid Build Coastguard Worker extern "C" {
129*6be67779SAndroid Build Coastguard Worker #endif
130*6be67779SAndroid Build Coastguard Worker 
131*6be67779SAndroid Build Coastguard Worker #ifdef XML_UNICODE_WCHAR_T
132*6be67779SAndroid Build Coastguard Worker #  ifndef XML_UNICODE
133*6be67779SAndroid Build Coastguard Worker #    define XML_UNICODE
134*6be67779SAndroid Build Coastguard Worker #  endif
135*6be67779SAndroid Build Coastguard Worker #  if defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__ != 2)
136*6be67779SAndroid Build Coastguard Worker #    error "sizeof(wchar_t) != 2; Need -fshort-wchar for both Expat and libc"
137*6be67779SAndroid Build Coastguard Worker #  endif
138*6be67779SAndroid Build Coastguard Worker #endif
139*6be67779SAndroid Build Coastguard Worker 
140*6be67779SAndroid Build Coastguard Worker #ifdef XML_UNICODE /* Information is UTF-16 encoded. */
141*6be67779SAndroid Build Coastguard Worker #  ifdef XML_UNICODE_WCHAR_T
142*6be67779SAndroid Build Coastguard Worker typedef wchar_t XML_Char;
143*6be67779SAndroid Build Coastguard Worker typedef wchar_t XML_LChar;
144*6be67779SAndroid Build Coastguard Worker #  else
145*6be67779SAndroid Build Coastguard Worker typedef unsigned short XML_Char;
146*6be67779SAndroid Build Coastguard Worker typedef char XML_LChar;
147*6be67779SAndroid Build Coastguard Worker #  endif /* XML_UNICODE_WCHAR_T */
148*6be67779SAndroid Build Coastguard Worker #else    /* Information is UTF-8 encoded. */
149*6be67779SAndroid Build Coastguard Worker typedef char XML_Char;
150*6be67779SAndroid Build Coastguard Worker typedef char XML_LChar;
151*6be67779SAndroid Build Coastguard Worker #endif   /* XML_UNICODE */
152*6be67779SAndroid Build Coastguard Worker 
153*6be67779SAndroid Build Coastguard Worker #ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */
154*6be67779SAndroid Build Coastguard Worker typedef long long XML_Index;
155*6be67779SAndroid Build Coastguard Worker typedef unsigned long long XML_Size;
156*6be67779SAndroid Build Coastguard Worker #else
157*6be67779SAndroid Build Coastguard Worker typedef long XML_Index;
158*6be67779SAndroid Build Coastguard Worker typedef unsigned long XML_Size;
159*6be67779SAndroid Build Coastguard Worker #endif /* XML_LARGE_SIZE */
160*6be67779SAndroid Build Coastguard Worker 
161*6be67779SAndroid Build Coastguard Worker #ifdef __cplusplus
162*6be67779SAndroid Build Coastguard Worker }
163*6be67779SAndroid Build Coastguard Worker #endif
164*6be67779SAndroid Build Coastguard Worker 
165*6be67779SAndroid Build Coastguard Worker #endif /* not Expat_External_INCLUDED */
166