diff options
author | marha <marha@users.sourceforge.net> | 2013-10-18 13:29:37 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-10-18 13:29:37 +0200 |
commit | 72483d25d0f41d48a8e6bdc83ab57c971cfb47b4 (patch) | |
tree | c8aa56f1e7dc24ce93287592c07a5f354eb6f86d /expat/xmlwf/codepage.c | |
parent | b821fe861f33d7e8a39fe4c7d885b7ff379dc476 (diff) | |
parent | 5880b059e9a156336daf32a73bed72def6ba90f2 (diff) | |
download | vcxsrv-72483d25d0f41d48a8e6bdc83ab57c971cfb47b4.tar.gz vcxsrv-72483d25d0f41d48a8e6bdc83ab57c971cfb47b4.tar.bz2 vcxsrv-72483d25d0f41d48a8e6bdc83ab57c971cfb47b4.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
Added expat-2.1.0
Diffstat (limited to 'expat/xmlwf/codepage.c')
-rw-r--r-- | expat/xmlwf/codepage.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/expat/xmlwf/codepage.c b/expat/xmlwf/codepage.c new file mode 100644 index 000000000..57e48ff2d --- /dev/null +++ b/expat/xmlwf/codepage.c @@ -0,0 +1,68 @@ +/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd + See the file COPYING for copying permission. +*/ + +#include "codepage.h" + +#if (defined(WIN32) || (defined(__WATCOMC__) && defined(__NT__))) +#define STRICT 1 +#define WIN32_LEAN_AND_MEAN 1 + +#include <windows.h> + +int +codepageMap(int cp, int *map) +{ + int i; + CPINFO info; + if (!GetCPInfo(cp, &info) || info.MaxCharSize > 2) + return 0; + for (i = 0; i < 256; i++) + map[i] = -1; + if (info.MaxCharSize > 1) { + for (i = 0; i < MAX_LEADBYTES; i+=2) { + int j, lim; + if (info.LeadByte[i] == 0 && info.LeadByte[i + 1] == 0) + break; + lim = info.LeadByte[i + 1]; + for (j = info.LeadByte[i]; j <= lim; j++) + map[j] = -2; + } + } + for (i = 0; i < 256; i++) { + if (map[i] == -1) { + char c = (char)i; + unsigned short n; + if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, + &c, 1, &n, 1) == 1) + map[i] = n; + } + } + return 1; +} + +int +codepageConvert(int cp, const char *p) +{ + unsigned short c; + if (MultiByteToWideChar(cp, MB_PRECOMPOSED|MB_ERR_INVALID_CHARS, + p, 2, &c, 1) == 1) + return c; + return -1; +} + +#else /* not WIN32 */ + +int +codepageMap(int cp, int *map) +{ + return 0; +} + +int +codepageConvert(int cp, const char *p) +{ + return -1; +} + +#endif /* not WIN32 */ |