Exemplo n.º 1
0
static BOOL CALLBACK
wxEnumSymbolsCallback(PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext)
{
    wxEnumSymbolsCallbackBridge&
        bridge = *static_cast<wxEnumSymbolsCallbackBridge*>(UserContext);

    const wxWCharBuffer buf = wxConvLocal.cMB2WC(pSymInfo->Name);
    const size_t len = buf.length();

    // Allocate enough space for the wide char version of the struct.
    //
    // Note that there is no +1 here because sizeof(SYMBOL_INFOW) already
    // includes 1 byte of the name.
    wxScopedArray<BYTE> symbolBuffer(sizeof(SYMBOL_INFOW) + len*sizeof(WCHAR));

    SYMBOL_INFOW* const infoW = (SYMBOL_INFOW*)symbolBuffer.get();

    // Copy the original struct contents except for the last byte, which is the
    // first byte of its (narrow) name that we don't need.
    CopyMemory(infoW, pSymInfo, sizeof(SYMBOL_INFO) - sizeof(CHAR));

    // Size is different for narrow and wide variants of the struct, so fix it
    // up now.
    infoW->SizeOfStruct = sizeof(SYMBOL_INFOW);

    // Finally copy the converted name, which is the reason for doing all this.
    wxStrncpy(infoW->Name, buf.data(), len);

    return (*bridge.m_callback)(infoW, SymbolSize, bridge.m_data);
}
Exemplo n.º 2
0
wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
{
    m_chars = str.length() ;
    m_ubuf = NULL ;

#if SIZEOF_WCHAR_T == 4
    wxMBConvUTF16 converter ;
#if wxUSE_UNICODE
    size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
    converter.WC2MB( (char*) m_ubuf , str.wc_str(), unicharlen + 2 ) ;
#else
    const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
    size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
    converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
#endif
    m_chars = unicharlen / 2 ;
#else // SIZEOF_WCHAR_T is then 2
#if wxUSE_UNICODE
    m_ubuf = malloc( m_chars * 2 + 2 ) ;
    memcpy( m_ubuf , (UniChar*) str.wc_str() , m_chars * 2 + 2 ) ;
#else
    wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
    m_chars = wxWcslen( wchar.data() ) ;
    m_ubuf = malloc( m_chars * 2 + 2 ) ;
    memcpy( m_ubuf , (UniChar*) wchar.data() , m_chars * 2 + 2 ) ;
#endif
#endif
}
Exemplo n.º 3
0
wxString CControlSocket::ConvertDomainName(wxString domain)
{
	const wxWCharBuffer buffer = wxConvCurrent->cWX2WC(domain);

	int len = 0;
	while (buffer.data()[len])
		len++;

	char *utf8 = new char[len * 2 + 2];
	wxMBConvUTF8 conv;
	conv.WC2MB(utf8, buffer, len * 2 + 2);

	char *output;
	if (idna_to_ascii_8z(utf8, &output, IDNA_ALLOW_UNASSIGNED))
	{
		delete [] utf8;
		LogMessage(::Debug_Warning, _T("Could not convert domain name"));
		return domain;
	}
	delete [] utf8;

	wxString result = wxConvCurrent->cMB2WX(output);
	free(output);
	return result;
}
Exemplo n.º 4
0
WXDLLIMPEXP_BASE wchar_t* wxCRT_GetenvW(const wchar_t *name)
{
    // NB: buffer returned by getenv() is allowed to be overwritten next
    //     time getenv() is called, so it is OK to use static string
    //     buffer to hold the data.
    static wxWCharBuffer value;
    value = wxConvLibc.cMB2WC(getenv(wxConvLibc.cWC2MB(name)));
    return value.data();
}
Exemplo n.º 5
0
wxMacUniCharBuffer::wxMacUniCharBuffer( const wxString &str )
{
    wxMBConvUTF16 converter ;
#if wxUSE_UNICODE
    size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ;
    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
    converter.WC2MB( (char*) m_ubuf , str.wc_str(), unicharlen + 2 ) ;
#else
    const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ;
    size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ;
    m_ubuf = (UniChar*) malloc( unicharlen + 2 ) ;
    converter.WC2MB( (char*) m_ubuf , wchar.data() , unicharlen + 2 ) ;
#endif
    m_chars = unicharlen / 2 ;
}
Exemplo n.º 6
0
Arquivo: Utf.cpp Projeto: BBkBlade/e
size_t ConvertFromUTF8(const wxCharBuffer& utf8_buff, const wxMBConv& conv, wxWCharBuffer& wchar_buff,
						size_t& wchar_buff_len, wxCharBuffer& dest_buff, size_t& dest_buff_len,
						size_t char_len) { // static
	// Calculate length of conversion to widechar
	size_t wchar_len = wxConvUTF8.MB2WC(NULL, utf8_buff, 0);
	if (wchar_len == (size_t)-1) return (size_t)-1; // invalid conversion

	// Extend widechar buffer if needed
	if (wchar_buff_len < wchar_len + sizeof(wxChar)) {
		wchar_buff_len = wchar_len + sizeof(wxChar);
		wchar_buff = wxWCharBuffer(wchar_buff_len);
	}

	// Convert to widechar
	wchar_len = wxConvUTF8.MB2WC(wchar_buff.data(), utf8_buff, wchar_buff_len);
	if (wchar_len == (size_t)-1) return (size_t)-1; // invalid conversion

	// Calculate length of conversion to dest encoding
	size_t dest_len = conv.WC2MB(NULL, wchar_buff, 0);
	if (dest_len == (size_t)-1) return (size_t)-1; // invalid conversion

	// Extend dest buffer if needed
	if (dest_buff_len < dest_len + char_len) {
		dest_buff_len = dest_len + char_len;
		dest_buff = wxCharBuffer(dest_buff_len);
	}

	// Convert to dest encoding
	dest_len = conv.WC2MB(dest_buff.data(), wchar_buff,  dest_buff_len);
	if (dest_len == (size_t)-1) return (size_t)-1; // invalid conversion

	return dest_len;
}
Exemplo n.º 7
0
Arquivo: Utf.cpp Projeto: BBkBlade/e
size_t ConvertToUTF8(const char* source, const size_t source_len, const wxMBConv& conv, wxCharBuffer& temp_buff,
					 size_t& temp_buff_len, wxWCharBuffer& wchar_buff, size_t& wchar_buff_len,
					 wxCharBuffer& utf8_buff, size_t& utf8_buff_len, size_t char_len) { // static
	// We have to copy the source string to a temporary buffer so that we can
	// make it null terminated.
	if (temp_buff_len < source_len+char_len) {
		temp_buff_len = source_len+char_len;
		temp_buff = wxCharBuffer(temp_buff_len);
	}
	memcpy(temp_buff.data(), source, source_len);
	for (unsigned int i = 0; i < char_len; ++i) temp_buff.data()[source_len+i] = '\0';

	// Calculate length of conversion to widechar
	size_t wchar_len = conv.MB2WC(NULL, temp_buff, 0);
	if (wchar_len == (size_t)-1) return (size_t)-1; // invalid conversion

	// Extend widechar buffer if needed
	if (wchar_buff_len < wchar_len + sizeof(wxChar)) {
		wchar_buff_len = wchar_len + sizeof(wxChar);
		wchar_buff = wxWCharBuffer(wchar_buff_len);
	}

	// Convert to widechar
	wchar_len = conv.MB2WC(wchar_buff.data(), temp_buff, wchar_buff_len);
	if (wchar_len == (size_t)-1) return (size_t)-1; // invalid conversion

	// Calculate length of conversion to UTF-8
	size_t utf8_len = wxConvUTF8.WC2MB(NULL, wchar_buff, 0);
	if (utf8_len == (size_t)-1) return (size_t)-1; // invalid conversion

	// Extend UTF-8 buffer if needed
	if (utf8_buff_len < utf8_len) {
		utf8_buff_len = utf8_len + 1;
		utf8_buff = wxCharBuffer(utf8_buff_len);
	}

	// Convert to UTF-8
	utf8_len = wxConvUTF8.WC2MB(utf8_buff.data(), wchar_buff, utf8_buff_len);
	if (utf8_len == (size_t)-1) return (size_t)-1; // invalid conversion

	return utf8_len;
}