summaryrefslogtreecommitdiff
path: root/os400/transcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'os400/transcode.c')
-rw-r--r--os400/transcode.c268
1 files changed, 0 insertions, 268 deletions
diff --git a/os400/transcode.c b/os400/transcode.c
deleted file mode 100644
index bae6187..0000000
--- a/os400/transcode.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
-*** Transcoding support and wrappers.
-***
-*** See Copyright for the status of this software.
-***
-*** Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
-**/
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <sys/types.h>
-#include <iconv.h>
-#include "libxml/xmlmemory.h"
-#include "libxml/dict.h"
-#include "transcode.h"
-
-
-/**
-*** Destroy a dictionary and mark as destroyed.
-**/
-
-void
-xmlZapDict(xmlDictPtr * dict)
-
-{
- if (dict && *dict) {
- xmlDictFree(*dict);
- *dict = (xmlDictPtr) NULL;
- }
-}
-
-
-/**
-*** Support for inline conversion from/to UTF-8.
-*** This is targetted to function parameter encoding conversion.
-*** Method is:
-*** - Convert string from/to UTF-8.
-*** - Keep it in a dictionary.
-*** - Free original string if a release procedure is provided.
-*** Can also be called without dictionary to convert a string from/to UTF-8
-*** into xmlMalloc'ed dynamic storage.
-**/
-
-const char *
-xmlTranscodeResult(const xmlChar * s, const char * encoding,
- xmlDictPtr * dict, void (*freeproc)(const void *))
-
-{
- size_t l;
- iconv_t cd;
- char * srcp;
- char * dstp;
- size_t srcc;
- size_t dstc;
- char * ts;
- const char * ret;
- int err;
- static const int nullstring[] = { 0 };
-
- /* Convert from UTF-8. */
-
- if (!s)
- return (const char *) NULL;
-
- ret = (const char *) NULL;
- ts = (char *) NULL;
- err = 0;
- l = xmlStrlen(s);
-
- if (!l && dict)
- ret = (const char *) nullstring;
- else {
- if (dict && !*dict)
- err = !(*dict = xmlDictCreate());
-
- if (!err)
- err = !(ts = xmlMalloc(4 * l + 4));
-
- dstp = ts;
- dstc = 4 * l;
-
- if (!err && l) {
- if (!encoding)
- encoding = "ibm-0"; /* Job's encoding. */
-
- cd = iconv_open(encoding, "UTF-8");
-
- if (cd == (iconv_t) -1)
- err = 1;
- else {
- srcp = (char *) s;
- srcc = l;
- srcc = iconv(cd, &srcp, &srcc, &dstp, &dstc);
- iconv_close(cd);
- err = srcc == (size_t) -1;
- }
- }
-
- if (!err) {
- dstp[0] = dstp[1] = dstp[2] = dstp[3] = '\0';
-
- if (!dict) {
- if (dstc)
- ts = xmlRealloc(ts, (dstp - ts) + 4);
-
- ret = (const char *) ts;
- ts = (char *) NULL;
- }
- else
- ret = (char *) xmlDictLookup(*dict,
- (xmlChar *) ts, dstp - ts + 1);
- }
- }
-
- if (ts)
- xmlFree(ts);
-
- if (freeproc)
- (*freeproc)(s);
-
- return ret;
-}
-
-
-/**
-*** Support for inline conversion to UTF-8.
-*** Method is:
-*** - Convert string to UTF-8.
-*** - Keep it in a dictionary.
-*** Can also be called without dictionary to convert a string to UTF-8 into
-*** xmlMalloc'ed dynamic storage.
-**/
-
-static const xmlChar *
-inTranscode(const char * s, size_t l, const char * encoding, xmlDictPtr * dict)
-
-{
- iconv_t cd;
- char * srcp;
- char * dstp;
- size_t srcc;
- size_t dstc;
- xmlChar * ts;
- const xmlChar * ret;
- static const xmlChar nullstring[] = { 0 };
-
- if (!l && dict)
- return nullstring;
-
- if (dict && !*dict)
- if (!(*dict = xmlDictCreate()))
- return (const xmlChar *) NULL;
-
- ts = (xmlChar *) xmlMalloc(6 * l + 1);
-
- if (!ts)
- return (const xmlChar *) NULL;
-
- dstp = (char *) ts;
- dstc = 6 * l;
-
- if (l) {
- if (!encoding)
- encoding = "ibm-0"; /* Use job's encoding. */
-
- cd = iconv_open("UTF-8", encoding);
-
- if (cd == (iconv_t) -1) {
- xmlFree((char *) ts);
- return (const xmlChar *) NULL;
- }
-
- srcp = (char *) s;
- srcc = l;
- srcc = iconv(cd, &srcp, &srcc, &dstp, &dstc);
- iconv_close(cd);
-
- if (srcc == (size_t) -1) {
- xmlFree((char *) ts);
- return (const xmlChar *) NULL;
- }
- }
-
- *dstp = '\0';
-
- if (!dict) {
- if (dstc)
- ts = xmlRealloc(ts, (dstp - ts) + 1);
-
- return ts;
- }
-
- ret = xmlDictLookup(*dict, ts, dstp - ts + 1);
- xmlFree((char *) ts);
- return ret;
-}
-
-
-/**
-*** Input 8-bit character string parameter.
-**/
-
-const xmlChar *
-xmlTranscodeString(const char * s, const char * encoding, xmlDictPtr * dict)
-
-{
- if (!s)
- return (const xmlChar *) NULL;
-
- return inTranscode(s, xmlStrlen(s), encoding, dict);
-}
-
-
-/**
-*** Input 16-bit character string parameter.
-**/
-
-const xmlChar *
-xmlTranscodeWString(const char * s, const char * encoding, xmlDictPtr * dict)
-
-{
- size_t i;
-
- if (!s)
- return (const xmlChar *) NULL;
-
- for (i = 0; s[i] && s[i + 1]; i += 2)
- ;
-
- return inTranscode(s, i, encoding, dict);
-}
-
-
-/**
-*** Input 32-bit character string parameter.
-**/
-
-const xmlChar *
-xmlTranscodeHString(const char * s, const char * encoding, xmlDictPtr * dict)
-
-{
- size_t i;
-
- if (!s)
- return (const xmlChar *) NULL;
-
- for (i = 0; s[i] && s[i + 1] && s[i + 2] && s[i + 3]; i += 4)
- ;
-
- return inTranscode(s, i, encoding, dict);
-}
-
-
-/**
-*** vasprintf() implementation with result transcoding.
-**/
-
-const char *
-xmlVasprintf(xmlDictPtr * dict, const char * encoding,
- const xmlChar * fmt, va_list args)
-
-{
- char * s = NULL;
-
- vasprintf(&s, fmt, args);
- return xmlTranscodeResult((const xmlChar *) s, encoding, dict, free);
-}