/* */ #include "WinConsoleFile.h" #include #include #include #include #include "a2io.h" #include "util.h" namespace aria2 { WinConsoleFile::WinConsoleFile(DWORD stdHandle) : stdHandle_(stdHandle) {} WinConsoleFile::~WinConsoleFile() {} namespace { bool console(DWORD stdHandle) { DWORD mode; return GetConsoleMode(GetStdHandle(stdHandle), &mode); } } // namespace size_t WinConsoleFile::write(const char* str) { DWORD written; if(console(stdHandle_)) { std::wstring msg = utf8ToWChar(str); WriteConsoleW(GetStdHandle(stdHandle_), msg.c_str(), msg.size(), &written, 0); } else { WriteFile(GetStdHandle(stdHandle_), str, strlen(str), &written, 0); } return written; } int WinConsoleFile::vprintf(const char* format, va_list va) { ssize_t r = _vscprintf(format, va); if (r <= 0) { return 0; } char *buf = new char[++r]; r = vsnprintf(buf, r, format, va); if (r < 0) { delete [] buf; return 0; } DWORD written; if(console(stdHandle_)) { std::wstring msg = utf8ToWChar(buf); WriteConsoleW(GetStdHandle(stdHandle_), msg.c_str(), msg.size(), &written, 0); } else { WriteFile(GetStdHandle(stdHandle_), buf, r, &written, 0); } delete [] buf; return written; } int WinConsoleFile::flush() { return 0; } bool WinConsoleFile::supportsColor() { return false; } } // namespace aria2