mirror of
https://github.com/python/cpython
synced 2024-10-14 12:30:01 +00:00
winreg module avoids the deprecated Unicode API
This commit is contained in:
parent
0293db69a0
commit
be49244bdc
60
PC/winreg.c
60
PC/winreg.c
|
@ -760,26 +760,27 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
|
||||||
case REG_SZ:
|
case REG_SZ:
|
||||||
case REG_EXPAND_SZ:
|
case REG_EXPAND_SZ:
|
||||||
{
|
{
|
||||||
if (value == Py_None)
|
if (value != Py_None) {
|
||||||
*retDataSize = 1;
|
Py_ssize_t len;
|
||||||
else {
|
if (!PyUnicode_Check(value))
|
||||||
if (!PyUnicode_Check(value))
|
return FALSE;
|
||||||
return FALSE;
|
*retDataBuf = (BYTE*)PyUnicode_AsWideCharString(value, &len);
|
||||||
*retDataSize = Py_SAFE_DOWNCAST(
|
if (*retDataBuf == NULL)
|
||||||
2 + PyUnicode_GET_DATA_SIZE(value),
|
return FALSE;
|
||||||
size_t, DWORD);
|
*retDataSize = Py_SAFE_DOWNCAST(
|
||||||
}
|
(len + 1) * sizeof(wchar_t),
|
||||||
*retDataBuf = (BYTE *)PyMem_NEW(DWORD, *retDataSize);
|
Py_ssize_t, DWORD);
|
||||||
if (*retDataBuf==NULL){
|
}
|
||||||
PyErr_NoMemory();
|
else {
|
||||||
return FALSE;
|
*retDataBuf = (BYTE *)PyMem_NEW(wchar_t, 1);
|
||||||
}
|
if (*retDataBuf == NULL) {
|
||||||
if (value == Py_None)
|
PyErr_NoMemory();
|
||||||
wcscpy((wchar_t *)*retDataBuf, L"");
|
return FALSE;
|
||||||
else
|
}
|
||||||
wcscpy((wchar_t *)*retDataBuf,
|
((wchar_t *)*retDataBuf)[0] = L'\0';
|
||||||
PyUnicode_AS_UNICODE(value));
|
*retDataSize = 1 * sizeof(wchar_t);
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case REG_MULTI_SZ:
|
case REG_MULTI_SZ:
|
||||||
{
|
{
|
||||||
|
@ -796,10 +797,16 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
|
||||||
for (j = 0; j < i; j++)
|
for (j = 0; j < i; j++)
|
||||||
{
|
{
|
||||||
PyObject *t;
|
PyObject *t;
|
||||||
|
wchar_t *wstr;
|
||||||
|
Py_ssize_t len;
|
||||||
|
|
||||||
t = PyList_GET_ITEM(value, j);
|
t = PyList_GET_ITEM(value, j);
|
||||||
if (!PyUnicode_Check(t))
|
if (!PyUnicode_Check(t))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
size += Py_SAFE_DOWNCAST(2 + PyUnicode_GET_DATA_SIZE(t),
|
wstr = PyUnicode_AsUnicodeAndSize(t, &len);
|
||||||
|
if (wstr == NULL)
|
||||||
|
return FALSE;
|
||||||
|
size += Py_SAFE_DOWNCAST((len + 1) * sizeof(wchar_t),
|
||||||
size_t, DWORD);
|
size_t, DWORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -815,10 +822,15 @@ Py2Reg(PyObject *value, DWORD typ, BYTE **retDataBuf, DWORD *retDataSize)
|
||||||
for (j = 0; j < i; j++)
|
for (j = 0; j < i; j++)
|
||||||
{
|
{
|
||||||
PyObject *t;
|
PyObject *t;
|
||||||
|
wchar_t *wstr;
|
||||||
|
Py_ssize_t len;
|
||||||
|
|
||||||
t = PyList_GET_ITEM(value, j);
|
t = PyList_GET_ITEM(value, j);
|
||||||
wcscpy(P, PyUnicode_AS_UNICODE(t));
|
wstr = PyUnicode_AsUnicodeAndSize(t, &len);
|
||||||
P += 1 + wcslen(
|
if (wstr == NULL)
|
||||||
PyUnicode_AS_UNICODE(t));
|
return FALSE;
|
||||||
|
wcscpy(P, wstr);
|
||||||
|
P += (len + 1);
|
||||||
}
|
}
|
||||||
/* And doubly-terminate the list... */
|
/* And doubly-terminate the list... */
|
||||||
*P = '\0';
|
*P = '\0';
|
||||||
|
|
Loading…
Reference in a new issue