Win32: add Unicode conversion functions
commit7f90208cc24520f14f0cdfe022323ac07b84020d
authorKarsten Blees <blees@dcon.de>
Fri, 25 Nov 2011 20:05:06 +0000 (25 21:05 +0100)
committerKarsten Blees <blees@dcon.de>
Thu, 15 Mar 2012 17:15:45 +0000 (15 18:15 +0100)
tree9c4236ed18fc1110864c68f83ebcd8d0353a3e40
parent07089da06aabc1a22f29dccc948b7c928c0f9b3d
Win32: add Unicode conversion functions

Add Unicode conversion functions to convert between Windows native UTF-16LE
encoding to UTF-8 and back.

To support repositories with legacy-encoded file names, the UTF-8 to UTF-16
conversion function tries to create valid, unique file names even for
invalid UTF-8 byte sequences, so that these repositories can be checked out
without error.

The current implementation leaves invalid UTF-8 bytes in range 0xa0 - 0xff
as is (producing printable Unicode chars \u00a0 - \u00ff, equivalent to
ISO-8859-1), and converts 0x80 - 0x9f to hex-code (\u0080 - \u009f are
control chars).

The Windows MultiByteToWideChar API was not used as it either drops invalid
UTF-8 sequences (on Win2k/XP; producing non-unique or even empty file
names) or converts them to the replacement char \ufffd (Vista/7; causing
ERROR_INVALID_NAME in subsequent calls to file system APIs).

Signed-off-by: Karsten Blees <blees@dcon.de>
compat/mingw.c
compat/mingw.h