xref: /aosp_15_r20/external/libxml2/os400/wrappers.c (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker /**
2*7c568831SAndroid Build Coastguard Worker ***     UTF-8/EBCDIC wrappers to system and C library procedures.
3*7c568831SAndroid Build Coastguard Worker ***
4*7c568831SAndroid Build Coastguard Worker ***     See Copyright for the status of this software.
5*7c568831SAndroid Build Coastguard Worker ***
6*7c568831SAndroid Build Coastguard Worker ***     Author: Patrick Monnerat <[email protected]>, DATASPHERE S.A.
7*7c568831SAndroid Build Coastguard Worker **/
8*7c568831SAndroid Build Coastguard Worker 
9*7c568831SAndroid Build Coastguard Worker #include <sys/types.h>
10*7c568831SAndroid Build Coastguard Worker #include <sys/socket.h>
11*7c568831SAndroid Build Coastguard Worker #include <arpa/inet.h>
12*7c568831SAndroid Build Coastguard Worker #include <stdlib.h>
13*7c568831SAndroid Build Coastguard Worker #include <dlfcn.h>
14*7c568831SAndroid Build Coastguard Worker #include <netdb.h>
15*7c568831SAndroid Build Coastguard Worker #include <errno.h>
16*7c568831SAndroid Build Coastguard Worker 
17*7c568831SAndroid Build Coastguard Worker #include "config.h"
18*7c568831SAndroid Build Coastguard Worker 
19*7c568831SAndroid Build Coastguard Worker #include "libxml/xmlmemory.h"
20*7c568831SAndroid Build Coastguard Worker 
21*7c568831SAndroid Build Coastguard Worker #include "transcode.h"
22*7c568831SAndroid Build Coastguard Worker 
23*7c568831SAndroid Build Coastguard Worker 
24*7c568831SAndroid Build Coastguard Worker static const char *     lxdles = NULL;
25*7c568831SAndroid Build Coastguard Worker 
26*7c568831SAndroid Build Coastguard Worker 
27*7c568831SAndroid Build Coastguard Worker int
_lx_getaddrinfo(const char * node,const char * service,const struct addrinfo * hints,struct addrinfo ** res)28*7c568831SAndroid Build Coastguard Worker _lx_getaddrinfo(const char * node, const char * service,
29*7c568831SAndroid Build Coastguard Worker         const struct addrinfo * hints, struct addrinfo * * res)
30*7c568831SAndroid Build Coastguard Worker 
31*7c568831SAndroid Build Coastguard Worker {
32*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
33*7c568831SAndroid Build Coastguard Worker         int i;
34*7c568831SAndroid Build Coastguard Worker 
35*7c568831SAndroid Build Coastguard Worker         i = getaddrinfo(xmlTranscodeResult(node, NULL, &d, NULL),
36*7c568831SAndroid Build Coastguard Worker             xmlTranscodeResult(service, NULL, &d, NULL), hints, res);
37*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
38*7c568831SAndroid Build Coastguard Worker         return i;
39*7c568831SAndroid Build Coastguard Worker }
40*7c568831SAndroid Build Coastguard Worker 
41*7c568831SAndroid Build Coastguard Worker 
42*7c568831SAndroid Build Coastguard Worker const char *
_lx_inet_ntop(int af,const void * src,char * dst,socklen_t size)43*7c568831SAndroid Build Coastguard Worker _lx_inet_ntop(int af, const void * src, char * dst, socklen_t size)
44*7c568831SAndroid Build Coastguard Worker 
45*7c568831SAndroid Build Coastguard Worker {
46*7c568831SAndroid Build Coastguard Worker         const char * cp1 = inet_ntop(af, src, dst, size);
47*7c568831SAndroid Build Coastguard Worker         char const * cp2;
48*7c568831SAndroid Build Coastguard Worker         int i;
49*7c568831SAndroid Build Coastguard Worker 
50*7c568831SAndroid Build Coastguard Worker         if (!cp1)
51*7c568831SAndroid Build Coastguard Worker                 return cp1;
52*7c568831SAndroid Build Coastguard Worker 
53*7c568831SAndroid Build Coastguard Worker         if (!(cp2 = xmlTranscodeString(cp1, NULL, NULL)))
54*7c568831SAndroid Build Coastguard Worker                 return cp2;
55*7c568831SAndroid Build Coastguard Worker 
56*7c568831SAndroid Build Coastguard Worker         i = strlen(cp2);
57*7c568831SAndroid Build Coastguard Worker 
58*7c568831SAndroid Build Coastguard Worker         if (i >= size) {
59*7c568831SAndroid Build Coastguard Worker                 xmlFree((char *) cp2);
60*7c568831SAndroid Build Coastguard Worker                 errno = ENOSPC;
61*7c568831SAndroid Build Coastguard Worker                 return (const char *) NULL;
62*7c568831SAndroid Build Coastguard Worker                 }
63*7c568831SAndroid Build Coastguard Worker 
64*7c568831SAndroid Build Coastguard Worker         memcpy(dst, cp2, i + 1);
65*7c568831SAndroid Build Coastguard Worker         xmlFree((char *) cp2);
66*7c568831SAndroid Build Coastguard Worker         return dst;
67*7c568831SAndroid Build Coastguard Worker }
68*7c568831SAndroid Build Coastguard Worker 
69*7c568831SAndroid Build Coastguard Worker 
70*7c568831SAndroid Build Coastguard Worker void *
_lx_dlopen(const char * filename,int flag)71*7c568831SAndroid Build Coastguard Worker _lx_dlopen(const char * filename, int flag)
72*7c568831SAndroid Build Coastguard Worker 
73*7c568831SAndroid Build Coastguard Worker {
74*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
75*7c568831SAndroid Build Coastguard Worker         void * result;
76*7c568831SAndroid Build Coastguard Worker 
77*7c568831SAndroid Build Coastguard Worker         result = dlopen(xmlTranscodeResult(filename, NULL, &d, NULL), flag);
78*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
79*7c568831SAndroid Build Coastguard Worker         return result;
80*7c568831SAndroid Build Coastguard Worker }
81*7c568831SAndroid Build Coastguard Worker 
82*7c568831SAndroid Build Coastguard Worker 
83*7c568831SAndroid Build Coastguard Worker void *
_lx_dlsym(void * handle,const char * symbol)84*7c568831SAndroid Build Coastguard Worker _lx_dlsym(void * handle, const char * symbol)
85*7c568831SAndroid Build Coastguard Worker 
86*7c568831SAndroid Build Coastguard Worker {
87*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
88*7c568831SAndroid Build Coastguard Worker         void * result;
89*7c568831SAndroid Build Coastguard Worker 
90*7c568831SAndroid Build Coastguard Worker         result = dlsym(handle, xmlTranscodeResult(symbol, NULL, &d, NULL));
91*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
92*7c568831SAndroid Build Coastguard Worker         return result;
93*7c568831SAndroid Build Coastguard Worker }
94*7c568831SAndroid Build Coastguard Worker 
95*7c568831SAndroid Build Coastguard Worker 
96*7c568831SAndroid Build Coastguard Worker char *
_lx_dlerror(void)97*7c568831SAndroid Build Coastguard Worker _lx_dlerror(void)
98*7c568831SAndroid Build Coastguard Worker 
99*7c568831SAndroid Build Coastguard Worker {
100*7c568831SAndroid Build Coastguard Worker         char * cp1 = (char *) dlerror();
101*7c568831SAndroid Build Coastguard Worker 
102*7c568831SAndroid Build Coastguard Worker         if (!cp1)
103*7c568831SAndroid Build Coastguard Worker                 return cp1;
104*7c568831SAndroid Build Coastguard Worker 
105*7c568831SAndroid Build Coastguard Worker         if (lxdles)
106*7c568831SAndroid Build Coastguard Worker                 xmlFree((char *) lxdles);
107*7c568831SAndroid Build Coastguard Worker 
108*7c568831SAndroid Build Coastguard Worker         lxdles = (const char *) xmlTranscodeString(cp1, NULL, NULL);
109*7c568831SAndroid Build Coastguard Worker         return (char *) lxdles;
110*7c568831SAndroid Build Coastguard Worker }
111*7c568831SAndroid Build Coastguard Worker 
112*7c568831SAndroid Build Coastguard Worker 
113*7c568831SAndroid Build Coastguard Worker #ifdef LIBXML_ZLIB_ENABLED
114*7c568831SAndroid Build Coastguard Worker #include <zlib.h>
115*7c568831SAndroid Build Coastguard Worker 
116*7c568831SAndroid Build Coastguard Worker gzFile
_lx_gzopen(const char * path,const char * mode)117*7c568831SAndroid Build Coastguard Worker _lx_gzopen(const char * path, const char * mode)
118*7c568831SAndroid Build Coastguard Worker 
119*7c568831SAndroid Build Coastguard Worker {
120*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
121*7c568831SAndroid Build Coastguard Worker         gzFile f;
122*7c568831SAndroid Build Coastguard Worker 
123*7c568831SAndroid Build Coastguard Worker         f = gzopen(xmlTranscodeResult(path, NULL, &d, NULL),
124*7c568831SAndroid Build Coastguard Worker             xmlTranscodeResult(mode, NULL, &d, NULL));
125*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
126*7c568831SAndroid Build Coastguard Worker         return f;
127*7c568831SAndroid Build Coastguard Worker }
128*7c568831SAndroid Build Coastguard Worker 
129*7c568831SAndroid Build Coastguard Worker 
130*7c568831SAndroid Build Coastguard Worker gzFile
_lx_gzdopen(int fd,const char * mode)131*7c568831SAndroid Build Coastguard Worker _lx_gzdopen(int fd, const char * mode)
132*7c568831SAndroid Build Coastguard Worker 
133*7c568831SAndroid Build Coastguard Worker {
134*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
135*7c568831SAndroid Build Coastguard Worker         gzFile f;
136*7c568831SAndroid Build Coastguard Worker 
137*7c568831SAndroid Build Coastguard Worker         f = gzdopen(fd, xmlTranscodeResult(mode, NULL, &d, NULL));
138*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
139*7c568831SAndroid Build Coastguard Worker         return f;
140*7c568831SAndroid Build Coastguard Worker }
141*7c568831SAndroid Build Coastguard Worker 
142*7c568831SAndroid Build Coastguard Worker int
_lx_inflateInit2_(z_streamp strm,int windowBits,const char * version,int stream_size)143*7c568831SAndroid Build Coastguard Worker _lx_inflateInit2_(z_streamp strm, int windowBits,
144*7c568831SAndroid Build Coastguard Worker                                         const char * version, int stream_size)
145*7c568831SAndroid Build Coastguard Worker 
146*7c568831SAndroid Build Coastguard Worker {
147*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
148*7c568831SAndroid Build Coastguard Worker         int r;
149*7c568831SAndroid Build Coastguard Worker 
150*7c568831SAndroid Build Coastguard Worker         r = inflateInit2_(strm, windowBits,
151*7c568831SAndroid Build Coastguard Worker             xmlTranscodeResult(version, NULL, &d, NULL), stream_size);
152*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
153*7c568831SAndroid Build Coastguard Worker         return r;
154*7c568831SAndroid Build Coastguard Worker }
155*7c568831SAndroid Build Coastguard Worker 
156*7c568831SAndroid Build Coastguard Worker int
_lx_deflateInit2_(z_streamp strm,int level,int method,int windowBits,int memLevel,int strategy,const char * version,int stream_size)157*7c568831SAndroid Build Coastguard Worker _lx_deflateInit2_(z_streamp strm, int level, int method, int windowBits,
158*7c568831SAndroid Build Coastguard Worker         int memLevel, int strategy, const char * version, int stream_size)
159*7c568831SAndroid Build Coastguard Worker 
160*7c568831SAndroid Build Coastguard Worker {
161*7c568831SAndroid Build Coastguard Worker         xmlDictPtr d = NULL;
162*7c568831SAndroid Build Coastguard Worker         int r;
163*7c568831SAndroid Build Coastguard Worker 
164*7c568831SAndroid Build Coastguard Worker         r = deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
165*7c568831SAndroid Build Coastguard Worker             xmlTranscodeResult(version, NULL, &d, NULL), stream_size);
166*7c568831SAndroid Build Coastguard Worker         xmlZapDict(&d);
167*7c568831SAndroid Build Coastguard Worker         return r;
168*7c568831SAndroid Build Coastguard Worker }
169*7c568831SAndroid Build Coastguard Worker 
170*7c568831SAndroid Build Coastguard Worker #endif
171