blob: 65a872b6aa80485af4e55d3b35460ad7955d214f [file] [log] [blame]
// Note that we have a separate platform_win32_impl.h to deal with the fact that windows.h defines a macro
// called FindAtom, which mp4v2 also defines. In older versions of visual studio, this actually causes
// some pretty seriously issues with naming collisions and the defined macros (think infamous min/max macro
// of windows.h vs stdc++'s min/max template functions)
#include <windows.h>
///////////////////////////////////////////////////////////////////////////////
namespace mp4v2 { namespace platform { namespace win32 {
class Utf8ToFilename
{
public:
Utf8ToFilename( const string &utf8string );
~Utf8ToFilename( );
bool IsUTF16Valid( ) const;
operator LPCWSTR( ) const { return _wideCharString; }
operator LPWSTR( ) const { return _wideCharString; }
private:
Utf8ToFilename ( const Utf8ToFilename &src );
Utf8ToFilename &operator= ( const Utf8ToFilename &src );
wchar_t *ConvertToUTF16 ( const string &utf8 );
static int ConvertToUTF16Buf ( const char *utf8,
wchar_t *utf16_buf,
size_t num_bytes );
static int GetPrefixLen ( const string &utf8string );
static int IsAbsolute ( const string &utf8string );
static int IsPathSeparator ( char c );
static int IsUncPath ( const string &utf8string );
static const UINT8 *Utf8DecodeChar (
const UINT8 *utf8_char,
size_t num_bytes,
wchar_t *utf16,
int *invalid
);
static size_t Utf8LenFromUcs4 ( UINT32 ucs4 );
static UINT8 Utf8NumOctets ( UINT8 utf8_first_byte );
/**
* The UTF-8 encoding of the filename actually used
*/
string _utf8;
/**
* The UTF-16 encoding of the filename actually used
*/
wchar_t* _wideCharString;
public:
/**
* Accessor for @p _utf8
*/
const string& utf8;
};
}}} // namespace mp4v2::platform::win32