void vutf8printf(FILE *out, const char *str, va_list* ap) { #if PLATFORM == PLATFORM_WINDOWS char temp_buf[32*1024]; wchar_t wtemp_buf[32*1024]; size_t temp_len = vsnprintf(temp_buf, 32*1024, str, *ap); size_t wtemp_len = 32*1024-1; Utf8toWStr(temp_buf, temp_len, wtemp_buf, wtemp_len); CharToOemBuffW(&wtemp_buf[0], &temp_buf[0], wtemp_len+1); fprintf(out, "%s", temp_buf); #else vfprintf(out, str, *ap); #endif }
void CmdExtract::ConvertDosPassword(Archive &Arc,SecPassword &DestPwd) { if (Arc.Format==RARFMT15 && Arc.FileHead.HostOS==HOST_MSDOS) { // We need the password in OEM encoding if file was encrypted by // native RAR/DOS (not extender based). Let's make the conversion. wchar PlainPsw[MAXPASSWORD]; Password.Get(PlainPsw,ASIZE(PlainPsw)); char PswA[MAXPASSWORD]; CharToOemBuffW(PlainPsw,PswA,ASIZE(PswA)); PswA[ASIZE(PswA)-1]=0; CharToWide(PswA,PlainPsw,ASIZE(PlainPsw)); DestPwd.Set(PlainPsw); cleandata(PlainPsw,sizeof(PlainPsw)); cleandata(PswA,sizeof(PswA)); } }
void utf8print(void* /*arg*/, const char* str) { #if PLATFORM == PLATFORM_WINDOWS wchar_t wtemp_buf[6000]; size_t wtemp_len = 6000-1; if (!Utf8toWStr(str, strlen(str), wtemp_buf, wtemp_len)) return; char temp_buf[6000]; CharToOemBuffW(&wtemp_buf[0], &temp_buf[0], wtemp_len+1); printf(temp_buf); #else { printf("%s", str); fflush(stdout); } #endif }
void vutf8printf(FILE* file, const char* fmt, va_list& args) { #if PLATFORM == PLATFORM_WINDOWS #define BUFFER_LENGTH 32 * 1024 char temp_buf[BUFFER_LENGTH]; wchar_t wtemp_buf[BUFFER_LENGTH]; size_t temp_len = vsnprintf(temp_buf, BUFFER_LENGTH, fmt, args); size_t wtemp_len = BUFFER_LENGTH - 1; Utf8toWStr(temp_buf, temp_len, wtemp_buf, wtemp_len); CharToOemBuffW(&wtemp_buf[0], &temp_buf[0], wtemp_len + 1); fprintf(file, "%s", temp_buf); #else vfprintf(file, fmt, args); #endif }
void vutf8printf(FILE* out, const char *str, va_list* ap) { #if TRINITY_PLATFORM == TRINITY_PLATFORM_WINDOWS char temp_buf[32 * 1024]; wchar_t wtemp_buf[32 * 1024]; size_t temp_len = vsnprintf(temp_buf, 32 * 1024, str, *ap); //vsnprintf returns -1 if the buffer is too small if (temp_len == size_t(-1)) temp_len = 32*1024-1; size_t wtemp_len = 32*1024-1; Utf8toWStr(temp_buf, temp_len, wtemp_buf, wtemp_len); CharToOemBuffW(&wtemp_buf[0], &temp_buf[0], uint32(wtemp_len + 1)); fprintf(out, "%s", temp_buf); #else vfprintf(out, str, *ap); #endif }
void utf8print(const char* str) { #if PLATFORM == PLATFORM_WINDOWS std::wstring wtemp_buf; std::string temp_buf(str); if (!Utf8toWStr(temp_buf, wtemp_buf, 6000)) return; // Guarantee null termination if (!temp_buf.empty()) { wtemp_buf.push_back('\0'); temp_buf.resize(wtemp_buf.size()); CharToOemBuffW(&wtemp_buf[0], &temp_buf[0], wtemp_buf.size()); } printf("%s", temp_buf.c_str()); #else printf("%s", str); #endif }
void vutf8printf(FILE* out, const char* str, va_list* ap) { #if PLATFORM == PLATFORM_WINDOWS std::string temp_buf; temp_buf.resize(32 * 1024); std::wstring wtemp_buf; size_t temp_len = vsnprintf(&temp_buf[0], 32 * 1024, str, *ap); temp_buf.resize(strlen(temp_buf.c_str())); // Resize to match the formatted string if (!temp_buf.empty()) { Utf8toWStr(temp_buf, wtemp_buf, 32 * 1024); wtemp_buf.push_back('\0'); CharToOemBuffW(&wtemp_buf[0], &temp_buf[0], wtemp_buf.size()); } fprintf(out, "%s", temp_buf.c_str()); #else vfprintf(out, str, *ap); #endif }
/*********************************************************************** * CharToOemW (USER32.@) */ BOOL WINAPI CharToOemW( LPCWSTR s, LPSTR d ) { return CharToOemBuffW( s, d, strlenW( s ) + 1 ); }