Win32: add Unicode conversion functions
commitbd707614139042fc7a0fd8b90c2e524099c43d34
authorKarsten Blees <blees@dcon.de>
Fri, 25 Nov 2011 20:05:06 +0000 (25 21:05 +0100)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Tue, 19 Jun 2012 22:37:04 +0000 (19 23:37 +0100)
tree9199ca586bb24766b5f56e6e4c6622c8b7d440d2
parent3f712326ef020b12a6149afbd8b36b58e5e18686
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