diff --git a/src/calibre/devices/mtp/windows/device_enumeration.cpp b/src/calibre/devices/mtp/windows/device_enumeration.cpp index a3ceac38d1..0a364f0f17 100644 --- a/src/calibre/devices/mtp/windows/device_enumeration.cpp +++ b/src/calibre/devices/mtp/windows/device_enumeration.cpp @@ -254,7 +254,7 @@ get_device_information(CComPtr &device, CComPtrGetStringValue(what, &temp))) { \ + if (SUCCEEDED(values->GetStringValue(what, temp.unsafe_address()))) { \ pyobject_raii t(PyUnicode_FromWideChar(temp.ptr(), -1)); \ if (t) if (PyDict_SetItemString(ans, key, t.ptr()) != 0) PyErr_Clear(); \ }} @@ -305,9 +305,9 @@ get_device_information(CComPtr &device, CComPtr wchar_raii; @@ -46,26 +45,26 @@ typedef generic_raii pyobject_raii; static inline int -py_to_wchar(PyObject *obj, wchar_t **output) { +py_to_wchar(PyObject *obj, wchar_raii *output) { if (!PyUnicode_Check(obj)) { - if (obj == Py_None) { *output = NULL; return 1; } + if (obj == Py_None) { output->release(); return 1; } PyErr_SetString(PyExc_TypeError, "unicode object expected"); return 0; } wchar_t *buf = PyUnicode_AsWideCharString(obj, NULL); if (!buf) { PyErr_NoMemory(); return 0; } - *output = buf; + output->attach(buf); return 1; } static inline int -py_to_wchar_no_none(PyObject *obj, wchar_t **output) { +py_to_wchar_no_none(PyObject *obj, wchar_raii *output) { if (!PyUnicode_Check(obj)) { PyErr_SetString(PyExc_TypeError, "unicode object expected"); return 0; } wchar_t *buf = PyUnicode_AsWideCharString(obj, NULL); if (!buf) { PyErr_NoMemory(); return 0; } - *output = buf; + output->attach(buf); return 1; }