- #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