Blame os400/wrappers.c

Packit Service a31ea6
/**
Packit Service a31ea6
***     UTF-8/EBCDIC wrappers to system and C library procedures.
Packit Service a31ea6
***
Packit Service a31ea6
***     See Copyright for the status of this software.
Packit Service a31ea6
***
Packit Service a31ea6
***     Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
Packit Service a31ea6
**/
Packit Service a31ea6
Packit Service a31ea6
#include <sys/types.h>
Packit Service a31ea6
#include <sys/socket.h>
Packit Service a31ea6
#include <arpa/inet.h>
Packit Service a31ea6
#include <stdlib.h>
Packit Service a31ea6
#include <dlfcn.h>
Packit Service a31ea6
#include <netdb.h>
Packit Service a31ea6
#include <errno.h>
Packit Service a31ea6
Packit Service a31ea6
#include "config.h"
Packit Service a31ea6
Packit Service a31ea6
#include "libxml/xmlmemory.h"
Packit Service a31ea6
Packit Service a31ea6
#include "transcode.h"
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
static const char *     lxdles = NULL;
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
int
Packit Service a31ea6
_lx_getaddrinfo(const char * node, const char * service,
Packit Service a31ea6
        const struct addrinfo * hints, struct addrinfo * * res)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        int i;
Packit Service a31ea6
Packit Service a31ea6
        i = getaddrinfo(xmlTranscodeResult(node, NULL, &d, NULL),
Packit Service a31ea6
            xmlTranscodeResult(service, NULL, &d, NULL), hints, res);
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return i;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
const char *
Packit Service a31ea6
_lx_inet_ntop(int af, const void * src, char * dst, socklen_t size)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        const char * cp1 = inet_ntop(af, src, dst, size);
Packit Service a31ea6
        char const * cp2;
Packit Service a31ea6
        int i;
Packit Service a31ea6
Packit Service a31ea6
        if (!cp1)
Packit Service a31ea6
                return cp1;
Packit Service a31ea6
Packit Service a31ea6
        if (!(cp2 = xmlTranscodeString(cp1, NULL, NULL)))
Packit Service a31ea6
                return cp2;
Packit Service a31ea6
Packit Service a31ea6
        i = strlen(cp2);
Packit Service a31ea6
Packit Service a31ea6
        if (i >= size) {
Packit Service a31ea6
                xmlFree((char *) cp2);
Packit Service a31ea6
                errno = ENOSPC;
Packit Service a31ea6
                return (const char *) NULL;
Packit Service a31ea6
                }
Packit Service a31ea6
Packit Service a31ea6
        memcpy(dst, cp2, i + 1);
Packit Service a31ea6
        xmlFree((char *) cp2);
Packit Service a31ea6
        return dst;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
void *
Packit Service a31ea6
_lx_dlopen(const char * filename, int flag)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        void * result;
Packit Service a31ea6
Packit Service a31ea6
        result = dlopen(xmlTranscodeResult(filename, NULL, &d, NULL), flag);
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return result;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
void *
Packit Service a31ea6
_lx_dlsym(void * handle, const char * symbol)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        void * result;
Packit Service a31ea6
Packit Service a31ea6
        result = dlsym(handle, xmlTranscodeResult(symbol, NULL, &d, NULL));
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return result;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
char *
Packit Service a31ea6
_lx_dlerror(void)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        char * cp1 = (char *) dlerror();
Packit Service a31ea6
Packit Service a31ea6
        if (!cp1)
Packit Service a31ea6
                return cp1;
Packit Service a31ea6
Packit Service a31ea6
        if (lxdles)
Packit Service a31ea6
                xmlFree((char *) lxdles);
Packit Service a31ea6
Packit Service a31ea6
        lxdles = (const char *) xmlTranscodeString(cp1, NULL, NULL);
Packit Service a31ea6
        return (char *) lxdles;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
#ifdef HAVE_ZLIB_H
Packit Service a31ea6
#include <zlib.h>
Packit Service a31ea6
Packit Service a31ea6
gzFile
Packit Service a31ea6
_lx_gzopen(const char * path, const char * mode)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        gzFile f;
Packit Service a31ea6
Packit Service a31ea6
        f = gzopen(xmlTranscodeResult(path, NULL, &d, NULL),
Packit Service a31ea6
            xmlTranscodeResult(mode, NULL, &d, NULL));
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return f;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
Packit Service a31ea6
gzFile
Packit Service a31ea6
_lx_gzdopen(int fd, const char * mode)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        gzFile f;
Packit Service a31ea6
Packit Service a31ea6
        f = gzdopen(fd, xmlTranscodeResult(mode, NULL, &d, NULL));
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return f;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
int
Packit Service a31ea6
_lx_inflateInit2_(z_streamp strm, int windowBits,
Packit Service a31ea6
                                        const char * version, int stream_size)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        int r;
Packit Service a31ea6
Packit Service a31ea6
        r = inflateInit2_(strm, windowBits,
Packit Service a31ea6
            xmlTranscodeResult(version, NULL, &d, NULL), stream_size);
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return r;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
int
Packit Service a31ea6
_lx_deflateInit2_(z_streamp strm, int level, int method, int windowBits,
Packit Service a31ea6
        int memLevel, int strategy, const char * version, int stream_size)
Packit Service a31ea6
Packit Service a31ea6
{
Packit Service a31ea6
        xmlDictPtr d = NULL;
Packit Service a31ea6
        int r;
Packit Service a31ea6
Packit Service a31ea6
        r = deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
Packit Service a31ea6
            xmlTranscodeResult(version, NULL, &d, NULL), stream_size);
Packit Service a31ea6
        xmlZapDict(&d);
Packit Service a31ea6
        return r;
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
#endif