diff Objects/unicodeobject.c @ 12067:bcab189ddf86 legacy-trunk

MBCS codecs. (Win32 only.) By Mark Hammond.
author Guido van Rossum <guido@python.org>
date Tue, 28 Mar 2000 02:01:52 +0000
parents 7994d9db7f4d
children c3fc2b4617fc
line wrap: on
line diff
--- a/Objects/unicodeobject.c	Tue Mar 28 02:01:15 2000 +0000
+++ b/Objects/unicodeobject.c	Tue Mar 28 02:01:52 2000 +0000
@@ -73,6 +73,9 @@
 #define INT_MAX 2147483647
 #endif
 
+#ifdef MS_WIN32
+#include <windows.h>
+#endif
 /* Limit for the Unicode object free list */
 
 #define MAX_UNICODE_FREELIST_SIZE       1024
@@ -1479,6 +1482,62 @@
 				 NULL);
 }
 
+#ifdef MS_WIN32
+/* --- MBCS codecs for Windows -------------------------------------------- */
+PyObject *PyUnicode_DecodeMBCS(const char *s,
+				int size,
+				const char *errors)
+{
+    PyUnicodeObject *v;
+    Py_UNICODE *p;
+
+    /* First get the size of the result */
+    DWORD usize = MultiByteToWideChar(CP_ACP, 0, s, size, NULL, 0);
+    if (usize==0)
+        return PyErr_SetFromWindowsErrWithFilename(0, NULL);
+
+    v = _PyUnicode_New(usize);
+    if (v == NULL)
+        return NULL;
+    if (usize == 0)
+	return (PyObject *)v;
+    p = PyUnicode_AS_UNICODE(v);
+    if (0 == MultiByteToWideChar(CP_ACP, 0, s, size, p, usize)) {
+        Py_DECREF(v);
+        return PyErr_SetFromWindowsErrWithFilename(0, NULL);
+    }
+
+    return (PyObject *)v;
+}
+
+PyObject *PyUnicode_EncodeMBCS(const Py_UNICODE *p,
+				int size,
+				const char *errors)
+{
+    PyObject *repr;
+    char *s;
+
+    /* First get the size of the result */
+    DWORD mbcssize = WideCharToMultiByte(CP_ACP, 0, p, size, NULL, 0, NULL, NULL);
+    if (mbcssize==0)
+        return PyErr_SetFromWindowsErrWithFilename(0, NULL);
+
+    repr = PyString_FromStringAndSize(NULL, mbcssize);
+    if (repr == NULL)
+        return NULL;
+    if (mbcssize==0)
+        return repr;
+
+    /* Do the conversion */
+    s = PyString_AS_STRING(repr);
+    if (0 == WideCharToMultiByte(CP_ACP, 0, p, size, s, mbcssize, NULL, NULL)) {
+        Py_DECREF(repr);
+        return PyErr_SetFromWindowsErrWithFilename(0, NULL);
+    }
+    return repr;
+}
+#endif /* MS_WIN32 */
+
 /* --- Character Mapping Codec -------------------------------------------- */
 
 static