Fixed #6215 (Move Windows platform types into library)
This commit is contained in:
parent
0ed2b580b2
commit
e2f72b4cb1
948
cfg/windows.cfg
948
cfg/windows.cfg
|
@ -1,5 +1,890 @@
|
|||
<?xml version="1.0"?>
|
||||
<def format="1">
|
||||
<platformtype name="ACCESS_MASK" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
<unsigned/>
|
||||
</platformtype>
|
||||
<platformtype name="ATOM" value="short">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="BOOL" value="int">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="BOOLEAN" value="char">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="BYTE" value="char">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="CCHAR" value="char">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="CHAR" value="char">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="COLORREF" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="DWORD" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="DWORD32" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="DWORD64" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="DWORD_PTR" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="DWORD_PTR" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="FLOAT" value="float">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HACCEL" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HANDLE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HAGENT" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HAGENTSESSION" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HBITMAP" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HBRUSH" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HCOLORSPACE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HCURSOR" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HCONV" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HCONVLIST" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HDC" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HDDEDATA" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HDESK" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HDROP" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HDWP" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HENHMETAFILE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HFILE" value="int">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HFONT" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HGDIOBJ" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HGLOBAL" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HHOOK" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HICON" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HINSTANCE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HKEY" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HKL" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HLOCAL" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HMENU" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HMETAFILE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HMODULE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HMONITOR" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HPALETTE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HPEN" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HRESULT" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HRGN" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HRSRC" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HWND" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HSZ" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HWINSTA" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HALF_PTR" value="short">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="HALF_PTR" value="int">
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HCALL" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HLINE" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HLINEAPP" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HPHONE" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="HPHONEAPP" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT" value="int">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT8" value="char">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT16" value="short">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT32" value="int">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT64" value="long">
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT_PTR" value="int">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="INT_PTR" value="long">
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LANGID" value="short">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LCID" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LCTYPE" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LGRPID" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LONG" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LONG32" value="int">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LONG64" value="long">
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LONGLONG" value="long">
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LONG_PTR" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="LONG_PTR" value="long">
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPBOOL" value="int">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPARAM" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPARAM" value="long">
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPBYTE" value="char">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPCOLORREF" value="long">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPCSTR" value="char">
|
||||
<const_ptr/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPCTSTR" value="char">
|
||||
<const_ptr/>
|
||||
<platform type="win32A"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPCTSTR" value="wchar_t">
|
||||
<const_ptr/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPCVOID" value="void">
|
||||
<const_ptr/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPCWSTR" value="wchar_t">
|
||||
<const_ptr/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPDWORD" value="long">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPINT" value="int">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPLONG" value="long">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPSTR" value="char">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPTSTR" value="char">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPTSTR" value="wchar_t">
|
||||
<pointer/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPVOID" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPWORD" value="short">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LPWSTR" value="wchar_t">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="LRESULT" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="LRESULT" value="long">
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="MMRESULT" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="NTSTATUS" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PBOOL" value="int">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PBOOLEAN" value="char">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PBYTE" value="char">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PCHAR" value="char">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PCSTR" value="char">
|
||||
<const_ptr/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PCTSTR" value="char">
|
||||
<const_ptr/>
|
||||
<platform type="win32A"/>
|
||||
</platformtype>
|
||||
<platformtype name="PCTSTR" value="wchar_t">
|
||||
<const_ptr/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PDWORD" value="long">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PHANDLE" value="void">
|
||||
<ptr_ptr/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PINT" value="int">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PLONG" value="long">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PSTR" value="char">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PTSTR" value="char">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
</platformtype>
|
||||
<platformtype name="PTSTR" value="wchar_t">
|
||||
<pointer/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PUCHAR" value="char">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PULONG" value="long">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PUSHORT" value="short">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PVOID" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PWCHAR" value="wchar_t">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PWORD" value="short">
|
||||
<unsigned/>
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="PWSTR" value="wchar_t">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="QWORD" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SC_LOCK" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SC_HANDLE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SERVICE_STATUS_HANDLE" value="void">
|
||||
<pointer/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SHORT" value="short">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SIZE_T" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="SIZE_T" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SOCKET" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="SSIZE_T" value="long">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="SSIZE_T" value="long">
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="TBYTE" value="char">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
</platformtype>
|
||||
<platformtype name="TBYTE" value="wchar_t">
|
||||
<unsigned/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="TCHAR" value="char">
|
||||
<platform type="win32A"/>
|
||||
</platformtype>
|
||||
<platformtype name="TCHAR" value="wchar_t">
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UCHAR" value="char">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UHALF_PTR" value="short">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="UHALF_PTR" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT8" value="char">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT16" value="short">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT32" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT64" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT_PTR" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="UINT_PTR" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="ULONG" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="ULONG32" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="ULONG64" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="ULONGLONG" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="ULONG_PTR" value="long">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="ULONG_PTR" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="USHORT" value="short">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="USN" value="long">
|
||||
<long/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="VOID" value="void">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="WCHAR" value="wchar_t">
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="WORD" value="short">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<platformtype name="WPARAM" value="int">
|
||||
<unsigned/>
|
||||
<platform type="win32A"/>
|
||||
<platform type="win32W"/>
|
||||
</platformtype>
|
||||
<platformtype name="WPARAM" value="long">
|
||||
<unsigned/>
|
||||
<long/>
|
||||
<platform type="win64"/>
|
||||
</platformtype>
|
||||
<resource>
|
||||
<alloc init="true">CreatePen</alloc>
|
||||
<alloc init="true">CreateBrushIndirect</alloc>
|
||||
|
@ -538,71 +1423,8 @@
|
|||
<not-null/>
|
||||
</arg>
|
||||
</function>
|
||||
<podtype name="ACCESS_MASK" sign="u" size="4"/>
|
||||
<podtype name="ATOM" sign="u" size="2"/>
|
||||
<podtype name="BOOL" sign="s" size="4"/>
|
||||
<podtype name="BOOLEAN" sign="u" size="1"/>
|
||||
<podtype name="BYTE" sign="u" size="1"/>
|
||||
<podtype name="CCHAR" sign="s" size="1"/>
|
||||
<podtype name="CHAR" sign="s" size="1"/>
|
||||
<podtype name="COLORREF" sign="u" size="4"/>
|
||||
<podtype name="DWORD" sign="u" size="4"/>
|
||||
<podtype name="DWORDLONG" sign="u" size="8"/>
|
||||
<podtype name="DWORD_PTR" sign="u"/>
|
||||
<podtype name="DWORD32" sign="u" size="4"/>
|
||||
<podtype name="DWORD64" sign="u" size="8"/>
|
||||
<podtype name="HAGENT" sign="u" size="4"/>
|
||||
<podtype name="HAGENTSESSION" sign="u" size="4"/>
|
||||
<podtype name="HALF_PTR" sign="s"/>
|
||||
<podtype name="HCALL" sign="u" size="4"/>
|
||||
<podtype name="HFILE" sign="s" size="4"/>
|
||||
<podtype name="HLINE" sign="u" size="4"/>
|
||||
<podtype name="HLINEAPP" sign="u" size="4"/>
|
||||
<podtype name="HPHONE" sign="u" size="4"/>
|
||||
<podtype name="HPHONEAPP" sign="u" size="4"/>
|
||||
<podtype name="HRESULT" sign="s" size="4"/>
|
||||
<podtype name="INT" sign="s" size="4"/>
|
||||
<podtype name="INT_PTR" sign="s"/>
|
||||
<podtype name="INT8" sign="s" size="1"/>
|
||||
<podtype name="INT16" sign="s" size="2"/>
|
||||
<podtype name="INT32" sign="s" size="4"/>
|
||||
<podtype name="INT64" sign="s" size="8"/>
|
||||
<podtype name="LANGID" sign="u" size="2"/>
|
||||
<podtype name="LARGE_INTEGER" sign="s" size="8"/>
|
||||
<podtype name="LCID" sign="u" size="4"/>
|
||||
<podtype name="LCTYPE" sign="u" size="4"/>
|
||||
<podtype name="LGRPID" sign="u" size="4"/>
|
||||
<podtype name="LONG" sign="s" size="4"/>
|
||||
<podtype name="LONGLONG" sign="s" size="8"/>
|
||||
<podtype name="LONG_PTR" sign="s"/>
|
||||
<podtype name="LONG32" sign="s" size="4"/>
|
||||
<podtype name="LONG64" sign="s" size="8"/>
|
||||
<podtype name="LPARAM" sign="s"/>
|
||||
<podtype name="LRESULT" sign="s"/>
|
||||
<podtype name="NET_API_STATUS" sign="u" size="4"/>
|
||||
<podtype name="NTSTATUS" sign="s" size="4"/>
|
||||
<podtype name="POINTER_SIGNED" sign="s"/>
|
||||
<podtype name="POINTER_UNSIGNED" sign="u"/>
|
||||
<podtype name="QWORD" sign="u" size="8"/>
|
||||
<podtype name="SHORT" sign="s" size="2"/>
|
||||
<podtype name="SIZE_T" sign="u"/>
|
||||
<podtype name="SSIZE_T" sign="s"/>
|
||||
<podtype name="UCHAR" sign="u" size="1"/>
|
||||
<podtype name="UHALF_PTR" sign="u"/>
|
||||
<podtype name="UINT" sign="u" size="4"/>
|
||||
<podtype name="UINT_PTR" sign="u"/>
|
||||
<podtype name="UINT8" sign="u" size="1"/>
|
||||
<podtype name="UINT16" sign="u" size="2"/>
|
||||
<podtype name="UINT32" sign="u" size="4"/>
|
||||
<podtype name="UINT64" sign="u" size="8"/>
|
||||
<podtype name="ULARGE_INTEGER" sign="u" size="8"/>
|
||||
<podtype name="ULONG" sign="u" size="4"/>
|
||||
<podtype name="ULONGLONG" sign="u" size="8"/>
|
||||
<podtype name="ULONG_PTR" sign="u"/>
|
||||
<podtype name="ULONG32" sign="u" size="4"/>
|
||||
<podtype name="ULONG64" sign="u" size="8"/>
|
||||
<podtype name="USHORT" sign="u" size="2"/>
|
||||
<podtype name="USN" sign="s" size="8"/>
|
||||
<podtype name="WORD" sign="u" size="2"/>
|
||||
<podtype name="WPARAM" sign="u"/>
|
||||
</def>
|
||||
|
|
|
@ -534,6 +534,12 @@ bool CmdLineParser::ParseFromArgs(int argc, const char* const argv[])
|
|||
case Library::UNSUPPORTED_FORMAT:
|
||||
errmsg = "File is of unsupported format version";
|
||||
break;
|
||||
case Library::DUPLICATE_PLATFORM_TYPE:
|
||||
errmsg = "Duplicate platform type";
|
||||
break;
|
||||
case Library::PLATFORM_TYPE_REDEFINED:
|
||||
errmsg = "Platform type redefined";
|
||||
break;
|
||||
}
|
||||
if (!err.reason.empty())
|
||||
errmsg += " '" + err.reason + "'";
|
||||
|
|
|
@ -699,10 +699,13 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck, int /*argc*/, const cha
|
|||
bool posix = true;
|
||||
if (settings.standards.posix)
|
||||
posix = (settings.library.load(argv[0], "posix.cfg").errorcode == Library::OK);
|
||||
bool windows = true;
|
||||
if (settings.isWindowsPlatform())
|
||||
windows = (settings.library.load(argv[0], "windows.cfg").errorcode == Library::OK);
|
||||
|
||||
if (!std || !posix) {
|
||||
if (!std || !posix || !windows) {
|
||||
const std::list<ErrorLogger::ErrorMessage::FileLocation> callstack;
|
||||
const std::string msg("Failed to load " + std::string(!std ? "std.cfg" : "posix.cfg") + ". Your Cppcheck installation is broken, please re-install.");
|
||||
const std::string msg("Failed to load " + std::string(!std ? "std.cfg" : !posix ? "posix.cfg" : "windows.cfg") + ". Your Cppcheck installation is broken, please re-install.");
|
||||
#ifdef CFGDIR
|
||||
const std::string details("The Cppcheck binary was compiled with CFGDIR set to \"" +
|
||||
std::string(CFGDIR) + "\" and will therefore search for "
|
||||
|
|
|
@ -646,9 +646,12 @@ Settings MainWindow::GetCppcheckSettings()
|
|||
bool posix = true;
|
||||
if (result.standards.posix)
|
||||
posix = (LoadLibrary(&result.library, "posix.cfg").errorcode == Library::ErrorCode::OK);
|
||||
bool windows = true;
|
||||
if (result.platformType == Settings::Win32A || result.platformType == Settings::Win32W || result.platformType == Settings::Win64)
|
||||
windows = (LoadLibrary(&result.library, "windows.cfg").errorcode == Library::ErrorCode::OK);
|
||||
|
||||
if (!std || !posix)
|
||||
QMessageBox::warning(this, tr("Error"), tr("Failed to load %1. Your Cppcheck installation is broken. You can use --data-dir=<directory> at the command line to specify where this file is located.").arg(!std ? "std.cfg" : "posix.cfg"));
|
||||
if (!std || !posix || !windows)
|
||||
QMessageBox::critical(this, tr("Error"), tr("Failed to load %1. Your Cppcheck installation is broken. You can use --data-dir=<directory> at the command line to specify where this file is located.").arg(!std ? "std.cfg" : !posix ? "posix.cfg" : "windows.cfg"));
|
||||
|
||||
if (result._jobs <= 1) {
|
||||
result._jobs = 1;
|
||||
|
|
|
@ -46,6 +46,7 @@ Library::Error Library::load(const char exename[], const char path[])
|
|||
return Error();
|
||||
}
|
||||
|
||||
std::string absolute_path;
|
||||
// open file..
|
||||
tinyxml2::XMLDocument doc;
|
||||
tinyxml2::XMLError error = doc.LoadFile(path);
|
||||
|
@ -55,6 +56,8 @@ Library::Error Library::load(const char exename[], const char path[])
|
|||
if (Path::getFilenameExtension(fullfilename) == "") {
|
||||
fullfilename += ".cfg";
|
||||
error = doc.LoadFile(fullfilename.c_str());
|
||||
if (error != tinyxml2::XML_ERROR_FILE_NOT_FOUND)
|
||||
absolute_path = Path::getAbsoluteFilePath(fullfilename.c_str());
|
||||
}
|
||||
|
||||
if (error == tinyxml2::XML_ERROR_FILE_NOT_FOUND) {
|
||||
|
@ -69,12 +72,24 @@ Library::Error Library::load(const char exename[], const char path[])
|
|||
const char *sep = (!cfgfolder.empty() && cfgfolder[cfgfolder.size()-1U]=='/' ? "" : "/");
|
||||
const std::string filename(cfgfolder + sep + fullfilename);
|
||||
error = doc.LoadFile(filename.c_str());
|
||||
if (error != tinyxml2::XML_ERROR_FILE_NOT_FOUND)
|
||||
absolute_path = Path::getAbsoluteFilePath(filename.c_str());
|
||||
}
|
||||
} else
|
||||
absolute_path = Path::getAbsoluteFilePath(path);
|
||||
|
||||
if (error == tinyxml2::XML_NO_ERROR) {
|
||||
if (_files.find(absolute_path) == _files.end()) {
|
||||
Error err = load(doc);
|
||||
if (err.errorcode == OK)
|
||||
_files.insert(absolute_path);
|
||||
return err;
|
||||
}
|
||||
|
||||
return Error(OK); // ignore duplicates
|
||||
}
|
||||
|
||||
return (error == tinyxml2::XML_NO_ERROR) ?
|
||||
load(doc) :
|
||||
Error(error == tinyxml2::XML_ERROR_FILE_NOT_FOUND ? FILE_NOT_FOUND : BAD_XML);
|
||||
return Error(error == tinyxml2::XML_ERROR_FILE_NOT_FOUND ? FILE_NOT_FOUND : BAD_XML);
|
||||
}
|
||||
|
||||
bool Library::loadxmldata(const char xmldata[], std::size_t len)
|
||||
|
@ -383,6 +398,59 @@ Library::Error Library::load(const tinyxml2::XMLDocument &doc)
|
|||
podtypes[name] = podType;
|
||||
}
|
||||
|
||||
else if (nodename == "platformtype") {
|
||||
const char * const type_name = node->Attribute("name");
|
||||
if (type_name == nullptr)
|
||||
return Error(MISSING_ATTRIBUTE, "name");
|
||||
const char *value = node->Attribute("value");
|
||||
if (value == nullptr)
|
||||
return Error(MISSING_ATTRIBUTE, "value");
|
||||
PlatformType type;
|
||||
type._type = value;
|
||||
std::set<std::string> platform;
|
||||
for (const tinyxml2::XMLElement *typenode = node->FirstChildElement(); typenode; typenode = typenode->NextSiblingElement()) {
|
||||
if (strcmp(typenode->Name(), "platform") == 0) {
|
||||
const char * const type_attribute = typenode->Attribute("type");
|
||||
if (type_attribute == nullptr)
|
||||
return Error(MISSING_ATTRIBUTE, "type");
|
||||
platform.insert(type_attribute);
|
||||
} else if (strcmp(typenode->Name(), "signed") == 0)
|
||||
type._signed = true;
|
||||
else if (strcmp(typenode->Name(), "unsigned") == 0)
|
||||
type._unsigned = true;
|
||||
else if (strcmp(typenode->Name(), "long") == 0)
|
||||
type._long = true;
|
||||
else if (strcmp(typenode->Name(), "pointer") == 0)
|
||||
type._pointer= true;
|
||||
else if (strcmp(typenode->Name(), "ptr_ptr") == 0)
|
||||
type._ptr_ptr = true;
|
||||
else if (strcmp(typenode->Name(), "const_ptr") == 0)
|
||||
type._const_ptr = true;
|
||||
else
|
||||
return Error(BAD_ELEMENT, typenode->Name());
|
||||
}
|
||||
if (platform.empty()) {
|
||||
const PlatformType * const type_ptr = platform_type(type_name, "");
|
||||
if (type_ptr) {
|
||||
if (*type_ptr == type)
|
||||
return Error(DUPLICATE_PLATFORM_TYPE, type_name);
|
||||
return Error(PLATFORM_TYPE_REDEFINED, type_name);
|
||||
}
|
||||
platform_types[type_name] = type;
|
||||
} else {
|
||||
std::set<std::string>::const_iterator it;
|
||||
for (it = platform.begin(); it != platform.end(); ++it) {
|
||||
const PlatformType * const type_ptr = platform_type(type_name, *it);
|
||||
if (type_ptr) {
|
||||
if (*type_ptr == type)
|
||||
return Error(DUPLICATE_PLATFORM_TYPE, type_name);
|
||||
return Error(PLATFORM_TYPE_REDEFINED, type_name);
|
||||
}
|
||||
platforms[*it]._platform_types[type_name] = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
return Error(BAD_ELEMENT, node->Name());
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ class CPPCHECKLIB Library {
|
|||
public:
|
||||
Library();
|
||||
|
||||
enum ErrorCode { OK, FILE_NOT_FOUND, BAD_XML, BAD_ELEMENT, MISSING_ATTRIBUTE, BAD_ATTRIBUTE, BAD_ATTRIBUTE_VALUE, UNSUPPORTED_FORMAT };
|
||||
enum ErrorCode { OK, FILE_NOT_FOUND, BAD_XML, BAD_ELEMENT, MISSING_ATTRIBUTE, BAD_ATTRIBUTE, BAD_ATTRIBUTE_VALUE, UNSUPPORTED_FORMAT, DUPLICATE_PLATFORM_TYPE, PLATFORM_TYPE_REDEFINED };
|
||||
|
||||
class Error {
|
||||
public:
|
||||
|
@ -330,6 +330,59 @@ public:
|
|||
return (it != podtypes.end()) ? &(it->second) : nullptr;
|
||||
}
|
||||
|
||||
struct PlatformType {
|
||||
PlatformType()
|
||||
: _signed(false)
|
||||
, _unsigned(false)
|
||||
, _long(false)
|
||||
, _pointer(false)
|
||||
, _ptr_ptr(false)
|
||||
, _const_ptr(false) {
|
||||
}
|
||||
bool operator == (const PlatformType & type) const {
|
||||
return (_type == type._type &&
|
||||
_signed == type._signed &&
|
||||
_unsigned == type._unsigned &&
|
||||
_long == type._long &&
|
||||
_pointer == type._pointer &&
|
||||
_ptr_ptr == type._ptr_ptr &&
|
||||
_const_ptr == type._const_ptr);
|
||||
}
|
||||
bool operator != (const PlatformType & type) const {
|
||||
return !(*this == type);
|
||||
}
|
||||
std::string _type;
|
||||
bool _signed;
|
||||
bool _unsigned;
|
||||
bool _long;
|
||||
bool _pointer;
|
||||
bool _ptr_ptr;
|
||||
bool _const_ptr;
|
||||
};
|
||||
|
||||
struct Platform {
|
||||
const PlatformType *platform_type(const std::string &name) const {
|
||||
const std::map<std::string, struct PlatformType>::const_iterator it = _platform_types.find(name);
|
||||
return (it != _platform_types.end()) ? &(it->second) : nullptr;
|
||||
}
|
||||
std::map<std::string, PlatformType> _platform_types;
|
||||
};
|
||||
|
||||
const PlatformType *platform_type(const std::string &name, const std::string & platform) const {
|
||||
const std::map<std::string, Platform>::const_iterator it = platforms.find(platform);
|
||||
|
||||
if (it != platforms.end()) {
|
||||
const PlatformType * const type = it->second.platform_type(name);
|
||||
|
||||
if (type)
|
||||
return type;
|
||||
}
|
||||
|
||||
const std::map<std::string, PlatformType>::const_iterator it2 = platform_types.find(name);
|
||||
|
||||
return (it2 != platform_types.end()) ? &(it2->second) : nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
class ExportedFunctions {
|
||||
public:
|
||||
|
@ -386,6 +439,7 @@ private:
|
|||
std::set<std::string> _blocks;
|
||||
};
|
||||
int allocid;
|
||||
std::set<std::string> _files;
|
||||
std::map<std::string, int> _alloc; // allocation functions
|
||||
std::map<std::string, int> _dealloc; // deallocation functions
|
||||
std::map<std::string, bool> _noreturn; // is function noreturn?
|
||||
|
@ -400,6 +454,8 @@ private:
|
|||
std::map<std::string,int> _reflection; // invocation of reflection
|
||||
std::map<std::string, std::pair<bool, bool> > _formatstr; // Parameters for format string checking
|
||||
std::map<std::string, struct PodType> podtypes; // pod types
|
||||
std::map<std::string, PlatformType> platform_types; // platform independent typedefs
|
||||
std::map<std::string, Platform> platforms; // platform dependent typedefs
|
||||
|
||||
const ArgumentChecks * getarg(const std::string &functionName, int argnr) const;
|
||||
|
||||
|
|
18
lib/path.cpp
18
lib/path.cpp
|
@ -219,3 +219,21 @@ bool Path::isHeader(const std::string &path)
|
|||
const std::string extension = getFilenameExtensionInLowerCase(path);
|
||||
return (extension.compare(0, 2, ".h") == 0);
|
||||
}
|
||||
|
||||
std::string Path::getAbsoluteFilePath(const std::string& filePath)
|
||||
{
|
||||
std::string absolute_path;
|
||||
#if defined(__linux__) || defined(__sun) || defined(__hpux) || defined(__GNUC__)
|
||||
char * absolute = realpath(filePath.c_str(), NULL);
|
||||
if (absolute)
|
||||
absolute_path = absolute;
|
||||
free(absolute);
|
||||
#elif defined(_WIN32)
|
||||
char absolute[_MAX_PATH];
|
||||
if (_fullpath(absolute, filePath.c_str(), _MAX_PATH))
|
||||
absolute_path = absolute;
|
||||
#else
|
||||
#error Platform absolute path function needed
|
||||
#endif
|
||||
return absolute_path;
|
||||
}
|
||||
|
|
|
@ -104,6 +104,13 @@ public:
|
|||
*/
|
||||
static std::string getRelativePath(const std::string& absolutePath, const std::vector<std::string>& basePaths);
|
||||
|
||||
/**
|
||||
* @brief Get an absolute file path from a relative one.
|
||||
* @param filePath File path to be made absolute.
|
||||
* @return absolute path, if possible. Otherwise an empty path is returned
|
||||
*/
|
||||
static std::string getAbsoluteFilePath(const std::string& filePath);
|
||||
|
||||
/**
|
||||
* @brief Check if the file extension indicates that it's a C/C++ source file.
|
||||
* Check if the file has source file extension: *.c;*.cpp;*.cxx;*.c++;*.cc;*.txx
|
||||
|
|
201
lib/tokenize.cpp
201
lib/tokenize.cpp
|
@ -5655,179 +5655,54 @@ void Tokenizer::simplifyPlatformTypes()
|
|||
}
|
||||
}
|
||||
|
||||
if (_settings->platformType == Settings::Win32A ||
|
||||
_settings->platformType == Settings::Win32W ||
|
||||
_settings->platformType == Settings::Win64) {
|
||||
if (_settings->isWindowsPlatform()) {
|
||||
std::string platform_type = _settings->platformType == Settings::Win32A ? "win32A" :
|
||||
_settings->platformType == Settings::Win32W ? "win32W" : "win64";
|
||||
|
||||
for (Token *tok = list.front(); tok; tok = tok->next()) {
|
||||
if (tok->type() != Token::eType && tok->type() != Token::eName)
|
||||
continue;
|
||||
if (!tok->isUpperCaseName()) // All WinAPI types are uppercase. Reduce number of Token::Match calls by this condition.
|
||||
continue;
|
||||
|
||||
if (Token::Match(tok, "BOOL|INT|INT32|HFILE|LONG32")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("int");
|
||||
} else if (Token::Match(tok, "BOOLEAN|BYTE|UCHAR")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("char");
|
||||
tok->isUnsigned(true);
|
||||
} else if (tok->str() == "CHAR") {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("char");
|
||||
} else if (Token::Match(tok, "DWORD|ULONG|COLORREF|LCID|LCTYPE|LGRPID")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("long");
|
||||
tok->isUnsigned(true);
|
||||
} else if (Token::Match(tok, "DWORD_PTR|ULONG_PTR|SIZE_T")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("long");
|
||||
tok->isUnsigned(true);
|
||||
if (_settings->platformType == Settings::Win64)
|
||||
tok->isLong(true);
|
||||
} else if (tok->str() == "FLOAT") {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("float");
|
||||
} else if (Token::Match(tok, "HRESULT|LONG")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("long");
|
||||
} else if (tok->str() == "INT8") {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("char");
|
||||
tok->isSigned(true);
|
||||
} else if (Token::Match(tok, "INT64|LONG64|LONGLONG")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("long");
|
||||
tok->isLong(true);
|
||||
} else if (Token::Match(tok, "LONG_PTR|LPARAM|LRESULT|SSIZE_T")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("long");
|
||||
if (_settings->platformType == Settings::Win64)
|
||||
tok->isLong(true);
|
||||
} else if (Token::Match(tok, "LPBOOL|PBOOL")) {
|
||||
tok->str("int");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPBYTE|PBOOLEAN|PBYTE|PUCHAR")) {
|
||||
tok->isUnsigned(true);
|
||||
tok->str("char");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPCSTR|PCSTR")) {
|
||||
tok->str("const");
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("char");
|
||||
} else if (tok->str() == "LPCVOID") {
|
||||
tok->str("const");
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("void");
|
||||
} else if (Token::Match(tok, "LPDWORD|LPCOLORREF|PDWORD|PULONG")) {
|
||||
tok->isUnsigned(true);
|
||||
tok->str("long");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPINT|PINT")) {
|
||||
tok->str("int");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPLONG|PLONG")) {
|
||||
tok->str("long");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPSTR|PSTR|PCHAR")) {
|
||||
tok->str("char");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "PWSTR|PWCHAR")) {
|
||||
tok->str("wchar_t");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPVOID|PVOID|HANDLE|HBITMAP|HBRUSH|HCOLORSPACE|HCURSOR|HDC|HFONT|HGDIOBJ|HGLOBAL|HICON|HINSTANCE|HKEY|HLOCAL|HMENU|HMETAFILE|HMODULE|HPALETTE|HPEN|HRGN|HRSRC|HWND|SERVICE_STATUS_HANDLE|SC_LOCK|SC_HANDLE|HACCEL|HCONV|HCONVLIST|HDDEDATA|HDESK|HDROP|HDWP|HENHMETAFILE|HHOOK|HKL|HMONITOR|HSZ|HWINSTA")) {
|
||||
tok->str("void");
|
||||
tok->insertToken("*");
|
||||
} else if ((tok->str() == "PHANDLE")) {
|
||||
tok->str("void");
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "LPWORD|PWORD|PUSHORT")) {
|
||||
tok->isUnsigned(true);
|
||||
tok->str("short");
|
||||
tok->insertToken("*");
|
||||
} else if (Token::Match(tok, "SHORT|INT16")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("short");
|
||||
} else if (Token::Match(tok, "UINT|MMRESULT|SOCKET|ULONG32|UINT32|DWORD32")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->isUnsigned(true);
|
||||
tok->str("int");
|
||||
} else if (Token::Match(tok, "UINT_PTR|WPARAM")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->isUnsigned(true);
|
||||
if (_settings->platformType == Settings::Win64) {
|
||||
tok->str("long");
|
||||
tok->isLong(true);
|
||||
} else {
|
||||
tok->str("int");
|
||||
const Library::PlatformType * const platformtype = _settings->library.platform_type(tok->str(), platform_type);
|
||||
|
||||
if (platformtype) {
|
||||
Token *type_token;
|
||||
// check for namespace
|
||||
if (tok->strAt(-1) == "::") {
|
||||
const Token * tok1 = tok->tokAt(-2);
|
||||
// skip when non-global namespace defined
|
||||
if (tok1 && tok1->type() == Token::eName)
|
||||
continue;
|
||||
tok = tok->tokAt(-1);
|
||||
tok->deleteThis();
|
||||
}
|
||||
} else if (Token::Match(tok, "USHORT|WORD|ATOM|LANGID")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->isUnsigned(true);
|
||||
tok->str("short");
|
||||
} else if (tok->str() == "VOID") {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("void");
|
||||
} else if (tok->str() == "TCHAR") {
|
||||
tok->originalName(tok->str());
|
||||
if (_settings->platformType == Settings::Win32A)
|
||||
tok->str("char");
|
||||
else {
|
||||
tok->str("wchar_t");
|
||||
}
|
||||
} else if (tok->str() == "TBYTE") {
|
||||
tok->originalName(tok->str());
|
||||
tok->isUnsigned(true);
|
||||
if (_settings->platformType == Settings::Win32A)
|
||||
tok->str("short");
|
||||
else
|
||||
tok->str("char");
|
||||
} else if (Token::Match(tok, "PTSTR|LPTSTR")) {
|
||||
if (_settings->platformType == Settings::Win32A) {
|
||||
tok->str("char");
|
||||
if (platformtype->_const_ptr) {
|
||||
tok->str("const");
|
||||
tok->insertToken("*");
|
||||
tok->insertToken(platformtype->_type);
|
||||
type_token = tok;
|
||||
} else if (platformtype->_pointer) {
|
||||
tok->str(platformtype->_type);
|
||||
type_token = tok;
|
||||
tok->insertToken("*");
|
||||
} else if (platformtype->_ptr_ptr) {
|
||||
tok->str(platformtype->_type);
|
||||
type_token = tok;
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("*");
|
||||
} else {
|
||||
tok->str("wchar_t");
|
||||
tok->insertToken("*");
|
||||
tok->originalName(tok->str());
|
||||
tok->str(platformtype->_type);
|
||||
type_token = tok;
|
||||
}
|
||||
} else if (Token::Match(tok, "PCTSTR|LPCTSTR")) {
|
||||
tok->str("const");
|
||||
if (_settings->platformType == Settings::Win32A) {
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("char");
|
||||
} else {
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("wchar_t");
|
||||
}
|
||||
} else if (Token::Match(tok, "ULONG64|DWORD64|ULONGLONG")) {
|
||||
tok->originalName(tok->str());
|
||||
tok->isUnsigned(true);
|
||||
tok->isLong(true);
|
||||
tok->str("long");
|
||||
} else if (tok->str() == "HALF_PTR") {
|
||||
tok->originalName(tok->str());
|
||||
if (_settings->platformType == Settings::Win64)
|
||||
tok->str("int");
|
||||
else
|
||||
tok->str("short");
|
||||
} else if (tok->str() == "INT_PTR") {
|
||||
tok->originalName(tok->str());
|
||||
if (_settings->platformType == Settings::Win64) {
|
||||
tok->str("long");
|
||||
tok->isLong(true);
|
||||
} else {
|
||||
tok->str("int");
|
||||
}
|
||||
} else if (tok->str() == "LPWSTR") {
|
||||
tok->str("wchar_t");
|
||||
tok->insertToken("*");
|
||||
} else if (tok->str() == "LPCWSTR") {
|
||||
tok->str("const");
|
||||
tok->insertToken("*");
|
||||
tok->insertToken("wchar_t");
|
||||
} else if (tok->str() == "WCHAR") {
|
||||
tok->originalName(tok->str());
|
||||
tok->str("wchar_t");
|
||||
if (platformtype->_signed)
|
||||
type_token->isSigned(true);
|
||||
if (platformtype->_unsigned)
|
||||
type_token->isUnsigned(true);
|
||||
if (platformtype->_long)
|
||||
type_token->isLong(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ private:
|
|||
|
||||
void run() {
|
||||
LOAD_LIB_2(settings.library, "std.cfg");
|
||||
LOAD_LIB_2(settings.library, "windows.cfg");
|
||||
|
||||
TEST_CASE(coutCerrMisusage);
|
||||
|
||||
|
@ -52,8 +53,6 @@ private:
|
|||
TEST_CASE(testPrintfArgument);
|
||||
TEST_CASE(testPosixPrintfScanfParameterPosition); // #4900
|
||||
|
||||
LOAD_LIB_2(settings.library, "windows.cfg");
|
||||
|
||||
TEST_CASE(testMicrosoftPrintfArgument); // ticket #4902
|
||||
TEST_CASE(testMicrosoftScanfArgument);
|
||||
TEST_CASE(testMicrosoftCStringFormatArguments); // ticket #4920
|
||||
|
@ -3214,6 +3213,18 @@ private:
|
|||
"}\n", false, false, Settings::Win32A);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
check("void foo(UINT32 a, ::UINT32 b, Fred::UINT32 c) {\n"
|
||||
" printf(\"%d %d %d\n\", a, b, c);\n"
|
||||
"};\n", false, false, Settings::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'UINT32 {aka unsigned int}'.\n"
|
||||
"[test.cpp:2]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'UINT32 {aka unsigned int}'.\n", errout.str());
|
||||
|
||||
check("void foo(LPCVOID a, ::LPCVOID b, Fred::LPCVOID c) {\n"
|
||||
" printf(\"%d %d %d\n\", a, b, c);\n"
|
||||
"};\n", false, false, Settings::Win32A);
|
||||
ASSERT_EQUALS("[test.cpp:2]: (warning) %d in format string (no. 1) requires 'int' but the argument type is 'const void *'.\n"
|
||||
"[test.cpp:2]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'const void *'.\n", errout.str());
|
||||
|
||||
}
|
||||
|
||||
void testMicrosoftScanfArgument() {
|
||||
|
|
|
@ -34,9 +34,11 @@ public:
|
|||
|
||||
private:
|
||||
Settings settings_std;
|
||||
Settings settings_windows;
|
||||
|
||||
void run() {
|
||||
LOAD_LIB_2(settings_std.library, "std.cfg");
|
||||
LOAD_LIB_2(settings_windows.library, "windows.cfg");
|
||||
|
||||
// Make sure the Tokenizer::simplifyTokenList works.
|
||||
// The order of the simplifications is important. So this test
|
||||
|
@ -298,6 +300,22 @@ private:
|
|||
return tokenizer.tokens()->stringifyList(0, !simplify);
|
||||
}
|
||||
|
||||
std::string tokWithWindows(const char code[], bool simplify = true, Settings::PlatformType type = Settings::Unspecified) {
|
||||
errout.str("");
|
||||
|
||||
settings_windows.addEnabled("portability");
|
||||
settings_windows.platform(type);
|
||||
Tokenizer tokenizer(&settings_windows, this);
|
||||
|
||||
std::istringstream istr(code);
|
||||
tokenizer.tokenize(istr, "test.cpp");
|
||||
|
||||
if (simplify)
|
||||
tokenizer.simplifyTokenList2();
|
||||
|
||||
return tokenizer.tokens()->stringifyList(0, !simplify);
|
||||
}
|
||||
|
||||
std::string tok(const char code[], const char filename[]) {
|
||||
errout.str("");
|
||||
|
||||
|
@ -897,7 +915,7 @@ private:
|
|||
const char code[] = ";INT32 i[10];\n"
|
||||
"sizeof(i[0]);\n";
|
||||
ASSERT_EQUALS("; INT32 i [ 10 ] ; sizeof ( i [ 0 ] ) ;", tok(code, true, Settings::Unspecified));
|
||||
ASSERT_EQUALS("; int i [ 10 ] ; 4 ;", tok(code, true, Settings::Win32A));
|
||||
ASSERT_EQUALS("; int i [ 10 ] ; 4 ;", tokWithWindows(code, true, Settings::Win32A));
|
||||
}
|
||||
|
||||
void sizeof8() {
|
||||
|
|
|
@ -33,8 +33,11 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
Settings settings_windows;
|
||||
|
||||
void run() {
|
||||
LOAD_LIB_2(settings_windows.library, "windows.cfg");
|
||||
|
||||
TEST_CASE(tokenize1);
|
||||
TEST_CASE(tokenize2);
|
||||
TEST_CASE(tokenize3);
|
||||
|
@ -411,6 +414,7 @@ private:
|
|||
TEST_CASE(platformUnix64);
|
||||
TEST_CASE(platformWin32AStringCat); // ticket #5015
|
||||
TEST_CASE(platformWin32WStringCat); // ticket #5015
|
||||
TEST_CASE(platformWinWithNamespace);
|
||||
|
||||
TEST_CASE(simplifyMathFunctions); // ticket #5031
|
||||
TEST_CASE(simplifyMathFunctions_sqrt);
|
||||
|
@ -499,6 +503,36 @@ private:
|
|||
return "";
|
||||
}
|
||||
|
||||
std::string tokenizeAndStringifyWindows(const char code[], bool simplify = false, bool expand = true, Settings::PlatformType platform = Settings::Unspecified, const char* filename = "test.cpp", bool cpp11 = true) {
|
||||
errout.str("");
|
||||
|
||||
settings_windows.debugwarnings = true;
|
||||
settings_windows.platform(platform);
|
||||
settings_windows.standards.cpp = cpp11 ? Standards::CPP11 : Standards::CPP03;
|
||||
|
||||
// tokenize..
|
||||
Tokenizer tokenizer(&settings_windows, this);
|
||||
std::istringstream istr(code);
|
||||
tokenizer.tokenize(istr, filename);
|
||||
if (simplify)
|
||||
tokenizer.simplifyTokenList2();
|
||||
|
||||
// filter out ValueFlow messages..
|
||||
const std::string debugwarnings = errout.str();
|
||||
errout.str("");
|
||||
std::istringstream istr2(debugwarnings.c_str());
|
||||
std::string line;
|
||||
while (std::getline(istr2,line)) {
|
||||
if (line.find("ValueFlow") == std::string::npos)
|
||||
errout << line << "\n";
|
||||
}
|
||||
|
||||
if (tokenizer.tokens())
|
||||
return tokenizer.tokens()->stringifyList(false, expand, false, true, false, 0, 0);
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
void tokenize1() {
|
||||
const char code[] = "void f ( )\n"
|
||||
|
@ -6323,10 +6357,10 @@ private:
|
|||
"const wchar_t * lpcwstr ;";
|
||||
|
||||
// These types should be defined the same on all Windows platforms
|
||||
std::string win32A = tokenizeAndStringify(code, true, true, Settings::Win32A);
|
||||
std::string win32A = tokenizeAndStringifyWindows(code, true, true, Settings::Win32A);
|
||||
ASSERT_EQUALS(expected, win32A);
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringify(code, true, true, Settings::Win32W));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringify(code, true, true, Settings::Win64));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, true, Settings::Win32W));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, true, Settings::Win64));
|
||||
}
|
||||
|
||||
void platformWin32() {
|
||||
|
@ -6397,9 +6431,9 @@ private:
|
|||
"int int_ptr ;";
|
||||
|
||||
// These types should be defined the same on all Win32 platforms
|
||||
std::string win32A = tokenizeAndStringify(code, true, true, Settings::Win32A);
|
||||
std::string win32A = tokenizeAndStringifyWindows(code, true, true, Settings::Win32A);
|
||||
ASSERT_EQUALS(expected, win32A);
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringify(code, true, true, Settings::Win32W));
|
||||
ASSERT_EQUALS(win32A, tokenizeAndStringifyWindows(code, true, true, Settings::Win32W));
|
||||
}
|
||||
|
||||
void platformWin32A() {
|
||||
|
@ -6444,8 +6478,8 @@ private:
|
|||
"scanf ( \"%s\" , dst ) ; "
|
||||
"sscanf ( dst , \"%s\" , dst ) ; "
|
||||
"} "
|
||||
"unsigned short tbyte ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, false, true, Settings::Win32A));
|
||||
"unsigned char tbyte ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, false, true, Settings::Win32A));
|
||||
}
|
||||
|
||||
void platformWin32W() {
|
||||
|
@ -6476,7 +6510,7 @@ private:
|
|||
"wchar_t * lptstr ; "
|
||||
"const wchar_t * pctstr ; "
|
||||
"const wchar_t * lpctstr ; "
|
||||
"unsigned char tbyte ; "
|
||||
"unsigned wchar_t tbyte ; "
|
||||
"void foo ( ) { "
|
||||
"wchar_t tc ; tc = L\'c\' ; "
|
||||
"wchar_t src [ 10 ] = L\"123456789\" ; "
|
||||
|
@ -6491,7 +6525,7 @@ private:
|
|||
"wscanf ( L\"%s\" , dst ) ; "
|
||||
"swscanf ( dst , L\"%s\" , dst ) ; "
|
||||
"}";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, false, true, Settings::Win32W));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, false, true, Settings::Win32W));
|
||||
}
|
||||
|
||||
void platformWin64() {
|
||||
|
@ -6561,7 +6595,7 @@ private:
|
|||
"int half_ptr ; "
|
||||
"long long int_ptr ;";
|
||||
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win64));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, true, Settings::Win64));
|
||||
}
|
||||
|
||||
void platformUnix32() {
|
||||
|
@ -6659,13 +6693,23 @@ private:
|
|||
void platformWin32AStringCat() { //#5150
|
||||
const char code[] = "TCHAR text[] = _T(\"123\") _T(\"456\") _T(\"789\");";
|
||||
const char expected[] = "char text [ 10 ] = \"123456789\" ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win32A));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, true, Settings::Win32A));
|
||||
}
|
||||
|
||||
void platformWin32WStringCat() { //#5150
|
||||
const char code[] = "TCHAR text[] = _T(\"123\") _T(\"456\") _T(\"789\");";
|
||||
const char expected[] = "wchar_t text [ 10 ] = L\"123456789\" ;";
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringify(code, true, true, Settings::Win32W));
|
||||
ASSERT_EQUALS(expected, tokenizeAndStringifyWindows(code, true, true, Settings::Win32W));
|
||||
}
|
||||
|
||||
void platformWinWithNamespace() {
|
||||
const char code1[] = "UINT32 a; ::UINT32 b; foo::UINT32 c;";
|
||||
const char expected1[] = "unsigned int a ; unsigned int b ; foo :: UINT32 c ;";
|
||||
ASSERT_EQUALS(expected1, tokenizeAndStringifyWindows(code1, true, true, Settings::Win32A));
|
||||
|
||||
const char code2[] = "LPCVOID a; ::LPCVOID b; foo::LPCVOID c;";
|
||||
const char expected2[] = "const void * a ; const void * b ; foo :: LPCVOID c ;";
|
||||
ASSERT_EQUALS(expected2, tokenizeAndStringifyWindows(code2, true, true, Settings::Win32A));
|
||||
}
|
||||
|
||||
void isZeroNumber() const {
|
||||
|
|
Loading…
Reference in New Issue