Ticket #35744

VS2015の警告除去

Open Date: 2015-11-16 03:36 Last Update: 2016-02-09 22:26

Reporter:
(del#24082)
Owner:
(del#24082)
Status:
Closed
Component:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

Visual Studio 2015 でビルドした場合に出力される警告を除去する。

■モジュールごとの警告メッセージ

●Tera Term
1>..\common\ttlib.c(963): warning C4996: 'GetVersionExA': が古い形式として宣言されました。

2>svnrev.obj : warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます。

6>ttl.c(1161): warning C4267: '=': 'size_t' から 'WORD' に変換しました。データが失われているかもしれません。

6>ttl.c(2331): warning C4996: 'WSASocketA': Use WSASocketW() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

6>ttl.c(2343): warning C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

7>ttset.c(3094): warning C4477: 'sscanf' : format string '%d' requires an argument of type 'int *', but variadic argument 1 has type 'WORD *'

5>kermit.c(1043): warning C4267: '関数': 'size_t' から 'BYTE' に変換しました。データが失われているかもしれません。

9>vtwin.cpp(285): warning C4302: '型キャスト': 'LPCTSTR' から 'WORD' へ切り詰めます。

●TTSSH
4>ttssh.obj : warning LNK4075: /EDITANDCONTINUE は /SAFESEH の指定によって無視されます。

5>c:\usr\ttssh2_vc2015\trunk\ttssh2\ttxssh\dns.c(66): warning C4996: 'GetVersionExA': が古い形式として宣言されました。

5>c:\usr\ttssh2_vc2015\trunk\ttssh2\ttxssh\ed25519_bcrypt_pbkdf.c(77): warning C4267: '関数': 'size_t' から 'u_int16_t' に変換しました。データが失われているかもしれません。

5>c:\usr\ttssh2_vc2015\trunk\ttssh2\ttxssh\fwd.c(201): warning C4996: 'WSACancelAsyncRequest': Define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

5>c:\usr\ttssh2_vc2015\trunk\ttssh2\ttxssh\fwd.c(598): warning C4996: 'WSAAsyncSelect': Use WSAEventSelect() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings

5>c:\usr\ttssh2_vc2015\trunk\ttssh2\ttxssh\key.c(825): warning C4267: '=': 'size_t' から 'unsigned char' に変換しました。データが失われているかもしれません。



■対処方法

●GetVersionEx
 新しいVisual Studioでは、GetVersion系関数を推奨していないため、VerifyVersionInfo関数に
 置換する必要がある。
 下記に示すプラグマでコンパイラの警告を抑止することもできるが、GetVersion系に限定
 しているわけではない。
 
  #pragma warning(disable:4996)
 
 コンパイラのバージョンで使用するAPIを切り替える方法が望ましい。
 参考までに、Wireshark 2.0.0だと以下のようになっている。
 下記例では、OSのメジャー番号が6以上かどうかを見ている。
 
gboolean IsWindowsVistaOrLater()
{
#if (_MSC_VER >= 1800)
    /*
     * On VS2103, GetVersionEx is deprecated. Microsoft recommend to
     * use VerifyVersionInfo instead
     */
    OSVERSIONINFOEX osvi;
    DWORDLONG dwlConditionMask = 0;
    int op = VER_GREATER_EQUAL;

    SecureZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    osvi.dwMajorVersion = 6;
    VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op);
    return VerifyVersionInfo(&osvi, VER_MAJORVERSION, dwlConditionMask);
#else
    OSVERSIONINFO osvi;

    SecureZeroMemory(&osvi, sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

    if(GetVersionEx(&osvi)){
        return osvi.dwMajorVersion >= 6;
    }
    return FALSE;
#endif
}

 
 参考までに、OSのメジャー番号とマイナー番号の両方をチェックするには以下のようにする。
 
    OSVERSIONINFOEX OSver;
    ULONGLONG condition = 0;
    OSver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    OSver.dwMajorVersion = 6;
    OSver.dwMinorVersion = 2;
    VER_SET_CONDITION( condition, VER_MAJORVERSION, VER_GREATER_EQUAL);
    VER_SET_CONDITION( condition, VER_MINORVERSION, VER_GREATER_EQUAL);
    if( VerifyVersionInfo( &OSver, VER_MAJORVERSION | VER_MINORVERSION, condition))
    {
      // Windows8.0以上の時の処理
    }
    else
    {
      // それ以外の処理
    }

 以上より、対応方針としては以下のようにする。
 修正箇所が多く、影響範囲が少なくないので、ブランチ上で作業して、問題ないことが
 確認取れたらトランクにマージとする。
 
 1. IsWindowsVistaOrLaterのような関数を作成する。
 2. GetVersionの使用箇所を置き換える。

Ticket History (3/9 Histories)

2015-11-16 03:36 Updated by: (del#24082)
  • New Ticket "VS2015の警告除去" created
2015-11-16 03:45 Updated by: (del#24082)
  • Details Updated
2015-11-22 21:19 Updated by: (del#24082)
2015-11-22 22:16 Updated by: (del#24082)
  • Details Updated
2015-12-07 22:07 Updated by: (del#24082)
  • Details Updated
2015-12-23 22:28 Updated by: (del#24082)
  • Details Updated
2016-01-03 20:46 Updated by: (del#24082)
  • Resolution Update from None to Fixed
2016-02-09 22:26 Updated by: (del#1144)
  • Ticket Close date is changed to 2016-02-09 22:26
  • Status Update from Open to Closed

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login