From 9d3b93ba305e8a83bf1cec5146def2078e40b1a5 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 22 Nov 2011 02:27:30 +0100 Subject: [PATCH] Use the new Unicode API * Replace PyUnicode_FromUnicode(NULL, 0) by PyUnicode_New(0, 0) * Replce PyUnicode_FromUnicode(str, len) by PyUnicode_FromWideChar(str, len) * Replace Py_UNICODE by wchar_t * posix_putenv() uses PyUnicode_FromFormat() to create the string, instead of PyUnicode_FromUnicode() + _snwprintf() --- Modules/_ctypes/_ctypes.c | 4 ++-- Modules/posixmodule.c | 26 +++++++++++++------------- Modules/socketmodule.c | 2 +- Objects/abstract.c | 2 +- PC/_msi.c | 10 +++++----- PC/_subprocess.c | 17 +++++++---------- PC/msvcrtmodule.c | 4 ++-- PC/winreg.c | 10 +++++----- PC/winsound.c | 2 +- Python/dynload_win.c | 2 +- 10 files changed, 38 insertions(+), 41 deletions(-) diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index b45eea9ca3c..31906bf22bf 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -4255,7 +4255,7 @@ Array_subscript(PyObject *_self, PyObject *item) wchar_t *dest; if (slicelen <= 0) - return PyUnicode_FromUnicode(NULL, 0); + return PyUnicode_New(0, 0); if (step == 1) { return PyUnicode_FromWideChar(ptr + start, slicelen); @@ -4930,7 +4930,7 @@ Pointer_subscript(PyObject *_self, PyObject *item) wchar_t *dest; if (len <= 0) - return PyUnicode_FromUnicode(NULL, 0); + return PyUnicode_New(0, 0); if (step == 1) { return PyUnicode_FromWideChar(ptr + start, len); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 078010b8f00..975cd9afb82 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2599,7 +2599,7 @@ posix_listdir(PyObject *self, PyObject *args) /* Skip over . and .. */ if (wcscmp(wFileData.cFileName, L".") != 0 && wcscmp(wFileData.cFileName, L"..") != 0) { - v = PyUnicode_FromUnicode(wFileData.cFileName, wcslen(wFileData.cFileName)); + v = PyUnicode_FromWideChar(wFileData.cFileName, wcslen(wFileData.cFileName)); if (v == NULL) { Py_DECREF(d); d = NULL; @@ -2967,7 +2967,7 @@ posix__getfullpathname(PyObject *self, PyObject *args) result = GetFullPathNameW(wpath, result, woutbufp, &wtemp); } if (result) - v = PyUnicode_FromUnicode(woutbufp, wcslen(woutbufp)); + v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp)); else v = win32_error_object("GetFullPathNameW", po); if (woutbufp != woutbuf) @@ -3054,7 +3054,7 @@ posix__getfinalpathname(PyObject *self, PyObject *args) return win32_error_object("CloseHandle", po); target_path[result_length] = 0; - result = PyUnicode_FromUnicode(target_path, result_length); + result = PyUnicode_FromWideChar(target_path, result_length); free(target_path); return result; @@ -7750,7 +7750,7 @@ static PyObject * posix_putenv(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS - wchar_t *s1, *s2; + PyObject *s1, *s2; wchar_t *newenv; #else PyObject *os1, *os2; @@ -7762,7 +7762,7 @@ posix_putenv(PyObject *self, PyObject *args) #ifdef MS_WINDOWS if (!PyArg_ParseTuple(args, - "uu:putenv", + "UU:putenv", &s1, &s2)) return NULL; #else @@ -7799,26 +7799,26 @@ posix_putenv(PyObject *self, PyObject *args) /* len includes space for a trailing \0; the size arg to PyBytes_FromStringAndSize does not count that */ #ifdef MS_WINDOWS - len = wcslen(s1) + wcslen(s2) + 2; - newstr = PyUnicode_FromUnicode(NULL, (int)len - 1); -#else - len = PyBytes_GET_SIZE(os1) + PyBytes_GET_SIZE(os2) + 2; - newstr = PyBytes_FromStringAndSize(NULL, (int)len - 1); -#endif + newstr = PyUnicode_FromFormat("%U=%U", s1, s2); if (newstr == NULL) { PyErr_NoMemory(); goto error; } -#ifdef MS_WINDOWS newenv = PyUnicode_AsUnicode(newstr); if (newenv == NULL) goto error; - _snwprintf(newenv, len, L"%s=%s", s1, s2); if (_wputenv(newenv)) { posix_error(); goto error; } #else + len = PyBytes_GET_SIZE(os1) + PyBytes_GET_SIZE(os2) + 2; + newstr = PyBytes_FromStringAndSize(NULL, (int)len - 1); + if (newstr == NULL) { + PyErr_NoMemory(); + goto error; + } + newenv = PyBytes_AS_STRING(newstr); PyOS_snprintf(newenv, len, "%s=%s", s1, s2); if (putenv(newenv)) { diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 4742b44b7b9..40a18ed3c1d 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3900,7 +3900,7 @@ socket_gethostname(PyObject *self, PyObject *unused) PyObject *result; if (GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size)) - return PyUnicode_FromUnicode(buf, size); + return PyUnicode_FromWideChar(buf, size); if (GetLastError() != ERROR_MORE_DATA) return PyErr_SetFromWindowsErr(0); diff --git a/Objects/abstract.c b/Objects/abstract.c index bce97947c06..39f1a26138e 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -701,7 +701,7 @@ PyObject_Format(PyObject *obj, PyObject *format_spec) /* If no format_spec is provided, use an empty string */ if (format_spec == NULL) { - empty = PyUnicode_FromUnicode(NULL, 0); + empty = PyUnicode_New(0, 0); format_spec = empty; } diff --git a/PC/_msi.c b/PC/_msi.c index 6fb9c427135..0b5b94ec238 100644 --- a/PC/_msi.c +++ b/PC/_msi.c @@ -18,7 +18,7 @@ static PyObject* uuidcreate(PyObject* obj, PyObject*args) { UUID result; - unsigned short *cresult; + wchar_t *cresult; PyObject *oresult; /* May return ok, local only, and no address. @@ -35,7 +35,7 @@ uuidcreate(PyObject* obj, PyObject*args) return NULL; } - oresult = PyUnicode_FromUnicode(cresult, wcslen(cresult)); + oresult = PyUnicode_FromWideChar(cresult, wcslen(cresult)); RpcStringFreeW(&cresult); return oresult; @@ -379,7 +379,7 @@ record_getstring(msiobj* record, PyObject* args) } if (status != ERROR_SUCCESS) return msierror((int) status); - string = PyUnicode_FromUnicode(res, size); + string = PyUnicode_FromWideChar(res, size); if (buf != res) free(res); return string; @@ -401,7 +401,7 @@ record_setstring(msiobj* record, PyObject *args) { int status; int field; - Py_UNICODE *data; + wchar_t *data; if (!PyArg_ParseTuple(args, "iu:SetString", &field, &data)) return NULL; @@ -418,7 +418,7 @@ record_setstream(msiobj* record, PyObject *args) { int status; int field; - Py_UNICODE *data; + wchar_t *data; if (!PyArg_ParseTuple(args, "iu:SetStream", &field, &data)) return NULL; diff --git a/PC/_subprocess.c b/PC/_subprocess.c index fdcc55bd24c..93e51d35399 100644 --- a/PC/_subprocess.c +++ b/PC/_subprocess.c @@ -419,14 +419,14 @@ sp_CreateProcess(PyObject* self, PyObject* args) PyObject* environment; wchar_t *wenvironment; - Py_UNICODE* application_name; - Py_UNICODE* command_line; + wchar_t* application_name; + wchar_t* command_line; PyObject* process_attributes; /* ignored */ PyObject* thread_attributes; /* ignored */ int inherit_handles; int creation_flags; PyObject* env_mapping; - Py_UNICODE* current_directory; + wchar_t* current_directory; PyObject* startup_info; if (! PyArg_ParseTuple(args, "ZZOOiiOZO:CreateProcess", @@ -454,15 +454,10 @@ sp_CreateProcess(PyObject* self, PyObject* args) if (PyErr_Occurred()) return NULL; - if (env_mapping == Py_None) - environment = NULL; - else { + if (env_mapping != Py_None) { environment = getenvironment(env_mapping); if (! environment) return NULL; - } - - if (environment) { wenvironment = PyUnicode_AsUnicode(environment); if (wenvironment == NULL) { @@ -470,8 +465,10 @@ sp_CreateProcess(PyObject* self, PyObject* args) return NULL; } } - else + else { + environment = NULL; wenvironment = NULL; + } Py_BEGIN_ALLOW_THREADS result = CreateProcessW(application_name, diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c index e5a0a177bc1..f277b0a64dd 100755 --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -211,7 +211,7 @@ cannot be read with this function."); static PyObject * msvcrt_getwch(PyObject *self, PyObject *args) { - Py_UNICODE ch; + wchar_t ch; if (!PyArg_ParseTuple(args, ":getwch")) return NULL; @@ -254,7 +254,7 @@ a printable character."); static PyObject * msvcrt_getwche(PyObject *self, PyObject *args) { - Py_UNICODE ch; + wchar_t ch; if (!PyArg_ParseTuple(args, ":getwche")) return NULL; diff --git a/PC/winreg.c b/PC/winreg.c index 636d5d122c3..56bda5c2589 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -1227,8 +1227,8 @@ PyEnumValue(PyObject *self, PyObject *args) static PyObject * PyExpandEnvironmentStrings(PyObject *self, PyObject *args) { - Py_UNICODE *retValue = NULL; - Py_UNICODE *src; + wchar_t *retValue = NULL; + wchar_t *src; DWORD retValueSize; DWORD rc; PyObject *o; @@ -1241,7 +1241,7 @@ PyExpandEnvironmentStrings(PyObject *self, PyObject *args) return PyErr_SetFromWindowsErrWithFunction(retValueSize, "ExpandEnvironmentStrings"); } - retValue = (Py_UNICODE *)PyMem_Malloc(retValueSize * sizeof(Py_UNICODE)); + retValue = (wchar_t *)PyMem_Malloc(retValueSize * sizeof(wchar_t)); if (retValue == NULL) { return PyErr_NoMemory(); } @@ -1252,7 +1252,7 @@ PyExpandEnvironmentStrings(PyObject *self, PyObject *args) return PyErr_SetFromWindowsErrWithFunction(retValueSize, "ExpandEnvironmentStrings"); } - o = PyUnicode_FromUnicode(retValue, wcslen(retValue)); + o = PyUnicode_FromWideChar(retValue, wcslen(retValue)); PyMem_Free(retValue); return o; } @@ -1537,7 +1537,7 @@ PySetValueEx(PyObject *self, PyObject *args) { HKEY hKey; PyObject *obKey; - Py_UNICODE *valueName; + wchar_t *valueName; PyObject *obRes; PyObject *value; BYTE *data; diff --git a/PC/winsound.c b/PC/winsound.c index 1ed95bac423..b564eaba780 100644 --- a/PC/winsound.c +++ b/PC/winsound.c @@ -72,7 +72,7 @@ PyDoc_STRVAR(sound_module_doc, static PyObject * sound_playsound(PyObject *s, PyObject *args) { - Py_UNICODE *wsound; + wchar_t *wsound; int flags; int ok; diff --git a/Python/dynload_win.c b/Python/dynload_win.c index e511098d1d0..2cbfe9f30d2 100644 --- a/Python/dynload_win.c +++ b/Python/dynload_win.c @@ -249,7 +249,7 @@ dl_funcptr _PyImport_GetDynLoadWindows(const char *shortname, "DLL load failed: "); PyUnicode_AppendAndDel(&message, - PyUnicode_FromUnicode( + PyUnicode_FromWideChar( theInfo, theLength)); }