blob: a41c2fdd2b3889662836aae447f5ebb118958a08 [file] [log] [blame]
/* This file must be kept in alphabetical order. See test_commontypes.py */
#define EQ(key, value) key "\0" value /* string concatenation */
#ifdef _WIN64
# define W32_64(X,Y) Y
# else
# define W32_64(X,Y) X
# endif
static const char *common_simple_types[] = {
#ifdef MS_WIN32 /* Windows types */
EQ("ATOM", "WORD"),
EQ("BOOL", "int"),
EQ("BOOLEAN", "BYTE"),
EQ("BYTE", "unsigned char"),
EQ("CCHAR", "char"),
EQ("CHAR", "char"),
EQ("COLORREF", "DWORD"),
EQ("DWORD", "unsigned long"),
EQ("DWORD32", "unsigned int"),
EQ("DWORD64", "unsigned long long"),
EQ("DWORDLONG", "ULONGLONG"),
EQ("DWORD_PTR", "ULONG_PTR"),
#endif
EQ("FILE", "struct _IO_FILE"),
#ifdef MS_WIN32 /* more Windows types */
EQ("FLOAT", "float"),
EQ("HACCEL", "HANDLE"),
EQ("HALF_PTR", W32_64("short","int")),
EQ("HANDLE", "PVOID"),
EQ("HBITMAP", "HANDLE"),
EQ("HBRUSH", "HANDLE"),
EQ("HCOLORSPACE", "HANDLE"),
EQ("HCONV", "HANDLE"),
EQ("HCONVLIST", "HANDLE"),
EQ("HCURSOR", "HICON"),
EQ("HDC", "HANDLE"),
EQ("HDDEDATA", "HANDLE"),
EQ("HDESK", "HANDLE"),
EQ("HDROP", "HANDLE"),
EQ("HDWP", "HANDLE"),
EQ("HENHMETAFILE", "HANDLE"),
EQ("HFILE", "int"),
EQ("HFONT", "HANDLE"),
EQ("HGDIOBJ", "HANDLE"),
EQ("HGLOBAL", "HANDLE"),
EQ("HHOOK", "HANDLE"),
EQ("HICON", "HANDLE"),
EQ("HINSTANCE", "HANDLE"),
EQ("HKEY", "HANDLE"),
EQ("HKL", "HANDLE"),
EQ("HLOCAL", "HANDLE"),
EQ("HMENU", "HANDLE"),
EQ("HMETAFILE", "HANDLE"),
EQ("HMODULE", "HINSTANCE"),
EQ("HMONITOR", "HANDLE"),
EQ("HPALETTE", "HANDLE"),
EQ("HPEN", "HANDLE"),
EQ("HRESULT", "LONG"),
EQ("HRGN", "HANDLE"),
EQ("HRSRC", "HANDLE"),
EQ("HSZ", "HANDLE"),
EQ("HWND", "HANDLE"),
EQ("INT", "int"),
EQ("INT16", "short"),
EQ("INT32", "int"),
EQ("INT64", "long long"),
EQ("INT8", "signed char"),
EQ("INT_PTR", W32_64("int","long long")),
EQ("LANGID", "WORD"),
EQ("LCID", "DWORD"),
EQ("LCTYPE", "DWORD"),
EQ("LGRPID", "DWORD"),
EQ("LONG", "long"),
EQ("LONG32", "int"),
EQ("LONG64", "long long"),
EQ("LONGLONG", "long long"),
EQ("LONG_PTR", W32_64("long","long long")),
EQ("LPARAM", "LONG_PTR"),
EQ("LPBOOL", "BOOL *"),
EQ("LPBYTE", "BYTE *"),
EQ("LPCOLORREF", "DWORD *"),
EQ("LPCSTR", "const char *"),
EQ("LPCVOID", "const void *"),
EQ("LPCWSTR", "const WCHAR *"),
EQ("LPDWORD", "DWORD *"),
EQ("LPHANDLE", "HANDLE *"),
EQ("LPINT", "int *"),
EQ("LPLONG", "long *"),
EQ("LPSTR", "CHAR *"),
EQ("LPVOID", "void *"),
EQ("LPWORD", "WORD *"),
EQ("LPWSTR", "WCHAR *"),
EQ("LRESULT", "LONG_PTR"),
EQ("PBOOL", "BOOL *"),
EQ("PBOOLEAN", "BOOLEAN *"),
EQ("PBYTE", "BYTE *"),
EQ("PCHAR", "CHAR *"),
EQ("PCSTR", "const CHAR *"),
EQ("PCWSTR", "const WCHAR *"),
EQ("PDWORD", "DWORD *"),
EQ("PDWORD32", "DWORD32 *"),
EQ("PDWORD64", "DWORD64 *"),
EQ("PDWORDLONG", "DWORDLONG *"),
EQ("PDWORD_PTR", "DWORD_PTR *"),
EQ("PFLOAT", "FLOAT *"),
EQ("PHALF_PTR", "HALF_PTR *"),
EQ("PHANDLE", "HANDLE *"),
EQ("PHKEY", "HKEY *"),
EQ("PINT", "int *"),
EQ("PINT16", "INT16 *"),
EQ("PINT32", "INT32 *"),
EQ("PINT64", "INT64 *"),
EQ("PINT8", "INT8 *"),
EQ("PINT_PTR", "INT_PTR *"),
EQ("PLCID", "PDWORD"),
EQ("PLONG", "LONG *"),
EQ("PLONG32", "LONG32 *"),
EQ("PLONG64", "LONG64 *"),
EQ("PLONGLONG", "LONGLONG *"),
EQ("PLONG_PTR", "LONG_PTR *"),
EQ("PSHORT", "SHORT *"),
EQ("PSIZE_T", "SIZE_T *"),
EQ("PSSIZE_T", "SSIZE_T *"),
EQ("PSTR", "CHAR *"),
EQ("PUCHAR", "UCHAR *"),
EQ("PUHALF_PTR", "UHALF_PTR *"),
EQ("PUINT", "UINT *"),
EQ("PUINT16", "UINT16 *"),
EQ("PUINT32", "UINT32 *"),
EQ("PUINT64", "UINT64 *"),
EQ("PUINT8", "UINT8 *"),
EQ("PUINT_PTR", "UINT_PTR *"),
EQ("PULONG", "ULONG *"),
EQ("PULONG32", "ULONG32 *"),
EQ("PULONG64", "ULONG64 *"),
EQ("PULONGLONG", "ULONGLONG *"),
EQ("PULONG_PTR", "ULONG_PTR *"),
EQ("PUSHORT", "USHORT *"),
EQ("PVOID", "void *"),
EQ("PWCHAR", "WCHAR *"),
EQ("PWORD", "WORD *"),
EQ("PWSTR", "WCHAR *"),
EQ("QWORD", "unsigned long long"),
EQ("SC_HANDLE", "HANDLE"),
EQ("SC_LOCK", "LPVOID"),
EQ("SERVICE_STATUS_HANDLE", "HANDLE"),
EQ("SHORT", "short"),
EQ("SIZE_T", "ULONG_PTR"),
EQ("SSIZE_T", "LONG_PTR"),
EQ("UCHAR", "unsigned char"),
EQ("UHALF_PTR", W32_64("unsigned short","unsigned int")),
EQ("UINT", "unsigned int"),
EQ("UINT16", "unsigned short"),
EQ("UINT32", "unsigned int"),
EQ("UINT64", "unsigned long long"),
EQ("UINT8", "unsigned char"),
EQ("UINT_PTR", W32_64("unsigned int","unsigned long long")),
EQ("ULONG", "unsigned long"),
EQ("ULONG32", "unsigned int"),
EQ("ULONG64", "unsigned long long"),
EQ("ULONGLONG", "unsigned long long"),
EQ("ULONG_PTR", W32_64("unsigned long","unsigned long long")),
EQ("USHORT", "unsigned short"),
EQ("USN", "LONGLONG"),
EQ("VOID", "void"),
EQ("WCHAR", "wchar_t"),
EQ("WINSTA", "HANDLE"),
EQ("WORD", "unsigned short"),
EQ("WPARAM", "UINT_PTR"),
#endif
EQ("bool", "_Bool"),
};
#undef EQ
#undef W32_64
#define num_common_simple_types \
(sizeof(common_simple_types) / sizeof(common_simple_types[0]))
static const char *get_common_type(const char *search, size_t search_len)
{
const char *entry;
int index = search_sorted(common_simple_types, sizeof(const char *),
num_common_simple_types, search, search_len);
if (index < 0)
return NULL;
entry = common_simple_types[index];
return entry + strlen(entry) + 1;
}
static PyObject *b__get_common_types(PyObject *self, PyObject *arg)
{
int err;
size_t i;
for (i = 0; i < num_common_simple_types; i++) {
const char *s = common_simple_types[i];
PyObject *o = PyText_FromString(s + strlen(s) + 1);
if (o == NULL)
return NULL;
err = PyDict_SetItemString(arg, s, o);
Py_DECREF(o);
if (err < 0)
return NULL;
}
Py_INCREF(Py_None);
return Py_None;
}