| /* 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; |
| } |