Win32: add Unicode conversion functions
commit3cd966b4a98979fb50985e9984f08757d49df9de
authorKarsten Blees <blees@dcon.de>
Fri, 25 Nov 2011 20:05:06 +0000 (25 21:05 +0100)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Sun, 20 May 2012 23:45:34 +0000 (20 17:45 -0600)
tree7bbcd1ca068c795b7d4d9a88fc74e8726188650f
parent2dc93ce945e415aa66c7f95c10384e6bb970ca7d
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