fix windows build and clarify comment

This commit is contained in:
Joey Hess 2025-01-29 14:52:20 -04:00
parent 76bff3e8d1
commit 4e999af7ac
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38

View file

@ -53,36 +53,39 @@ instance OsPathConv FilePath where
#ifdef WITH_OSPATH
instance OsPathConv RawFilePath where
toOsPath = bytesToOsPath . S.toShort
#if defined(mingw32_HOST_OS)
toOsPath = bytesToOsPath
fromOsPath = bytesFromOsPath
#else
toOsPath = bytesToOsPath . S.toShort
fromOsPath = S.fromShort . bytesFromOsPath
#endif
instance OsPathConv ShortByteString where
toOsPath = bytesToOsPath
#if defined(mingw32_HOST_OS)
toOsPath = bytesToOsPath . S.fromShort
fromOsPath = S.toShort . bytesFromOsPath
#else
toOsPath = bytesToOsPath
fromOsPath = bytesFromOsPath
#endif
bytesToOsPath :: ShortByteString -> OsPath
#if defined(mingw32_HOST_OS)
-- On Windows, OsString contains a ShortByteString that is
-- utf-16 encoded. So have to convert the input to that.
-- This is relatively expensive.
-- utf-16 encoded. But the input RawFilePath is assumed to
-- be utf-8. So this is a relatively expensive conversion.
bytesToOsPath :: RawFilePath -> OsPath
bytesToOsPath = unsafePerformIO . encodeFS . fromRawFilePath
#else
bytesToOsPath :: ShortByteString -> OsPath
bytesToOsPath = OsString . PosixString
#endif
#if defined(mingw32_HOST_OS)
bytesFromOsPath :: OsPath -> RawFilePath
-- On Windows, OsString contains a ShortByteString that is
-- utf-16 encoded. So have to convert the input from that.
-- This is relatively expensive.
-- utf-16 encoded, but RawFilePath is utf-8.
-- So this is relatively expensive conversion.
bytesFromOsPath = toRawFilePath . cWcharsToChars_UCS2 . BS16.unpack . getWindowsString
#else
bytesFromOsPath :: OsPath -> ShortByteString