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