[Python-Dev] Removal of Win32 ANSI API
Hirokazu Yamamoto
ocean-city at m2.ccsnet.ne.jp
Sat Nov 13 17:21:37 CET 2010
On 2010/11/12 4:26, Victor Stinner wrote:
> On Thursday 11 November 2010 17:07:28 Hirokazu Yamamoto wrote:
>> Hello. Is it possible to remove Win32 ANSI API (ie: GetFileAttributesA)
>> and only use Win32 WIDE API (ie: GetFileAttributesW)?
>> Mainly in posixmodule.c.
>
> Even if I hate the MBCS encoding, because it replaces undecodable
characters
> by similar glyphs by default, I'm not certain that it is a good idea
to drop
> the bytes API.
On 2010/11/12 21:08, Victor Stinner wrote:
> On Thursday 11 November 2010 23:01:32 you wrote:
>>> Sure, it will divide the number of lines, of the code specific to
>>> Windows, by two.
>>
>> Can we get most of the code cleanup benefit without the backwards
>> compatibility risk by doing the decode from 'mbcs' on our side of the
>> fence?
>
> I created PyUnicode_FSDecoder, a ParseTuple converter used to work on unicode
> paths, instead of bytes paths. On Windows, this converter uses mbcs encoding
> in strict mode, whereas Windows converter uses replace error handler to
> decode, and ignore to encode. So I don't think that we should this converter
> on Windows.
>
>> That is, have code that was the C equivalent of:
>>
>> arg_is_bytes = not isinstance(arg, str)
>> if arg_is_bytes:
>> val = _decode_mbcs(arg)
>> # Decoding error checking here
>> else:
>> val = arg
>> # Common processing using WIDE API
>> if arg_is_bytes:
>> result = _encode_mbcs(wide_result)
>> # Encoding error checking here
>> else:
>> result = wide_result
>
> This doesn't make the code shorter, it may be longer than the actual code, and
> it is less compliant with the Windows native API...
Is it possible to implement new PyArg_ParseTuple converter to use
PyUnicode_Decode(const char *s,
Py_ssize_t size,
const char *encoding, /* mbcs */
const char *errors) /* replace */
and use it?
More information about the Python-Dev
mailing list