PyErr_SetExcFromWindowsErrWithFilenameObject() and PyErr_SetFromErrnoWithFilenameObject() have the same code to read the localized error message. The code can be factorized in a new function PyErr_GetWindowsMessage().
About the patch:
- free s_buf just after the call to PyUnicode_FromUnicode(), don't wait until the end of the function
- free s_buf if s_buf is not NULL and len==0. I suppose that this case is impossible, if len==0, s_buf is set to NULL or leaved unchanged (so it's also equal to NULL)
I wrote the function to raise an UnicodeDecodeError with a Windows error message. |