#include <cerrno> #include <cstring> #include <j/lang/errno.hpp> namespace j { namespace lang { namespace Errno { #if (IS_WINDOWS) //////////////////////////////////////////////////////////////////////////////// // // For Windows // /** * エラー番号を設定します。 * * @param errnum エラー番号 */ void set(int errnum) { SetLastError(errnum); } /** * エラー番号を取得します。 * * @return エラー番号 */ int get() { return GetLastError(); } /** * エラー番号に対応するエラーメッセージを取得します。 * * @param errnum エラー番号 * @return エラーメッセージ */ String message(int errnum) { LPVOID lpMsgBuf; int ret = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, // 動作フラグ 0, // メッセージ定義位置 errnum, // エラーコード MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // 言語ID (LPSTR)&lpMsgBuf, // バッファアドレス 0, // バッファサイズ 0); // 挿入句 if (ret != 0) { String msg((char *)lpMsgBuf); LocalFree(lpMsgBuf); return msg; } else { String msg(); return msg; } } #else //////////////////////////////////////////////////////////////////////////////// // // For Windows 以外 // /** * エラー番号を設定します。 * * @param errnum エラー番号 */ void set(int errnum) { errno = errnum; } /** * エラー番号を取得します。 * * @return エラー番号 */ int get() { return errno; } /** * エラー番号に対応するエラーメッセージを取得します。 * * @param errnum エラー番号 * @return エラーメッセージ */ String message(int errnum) { String msg(strerror(errnum)); return msg; } #endif // IS_WINDOWS } // namespace Errno } // namespace lang } // namespace j