/* */ #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::printf(const char* format, ...) { char buf[1024]; va_list ap; va_start(ap, format); int r = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); if(r <= 0) { 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); } return written; } int WinConsoleFile::flush() { return 0; } } // namespace aria2