PHP 8.0.30
Preview: commontypes.py Size: 2.63 KB
//lib64/python3.6/site-packages/cffi/commontypes.py

import sys
from . import model
from .error import FFIError


COMMON_TYPES = {}

try:
    # fetch "bool" and all simple Windows types
    from _cffi_backend import _get_common_types
    _get_common_types(COMMON_TYPES)
except ImportError:
    pass

COMMON_TYPES['FILE'] = model.unknown_type('FILE', '_IO_FILE')
COMMON_TYPES['bool'] = '_Bool'    # in case we got ImportError above

for _type in model.PrimitiveType.ALL_PRIMITIVE_TYPES:
    if _type.endswith('_t'):
        COMMON_TYPES[_type] = _type
del _type

_CACHE = {}

def resolve_common_type(parser, commontype):
    try:
        return _CACHE[commontype]
    except KeyError:
        cdecl = COMMON_TYPES.get(commontype, commontype)
        if not isinstance(cdecl, str):
            result, quals = cdecl, 0    # cdecl is already a BaseType
        elif cdecl in model.PrimitiveType.ALL_PRIMITIVE_TYPES:
            result, quals = model.PrimitiveType(cdecl), 0
        elif cdecl == 'set-unicode-needed':
            raise FFIError("The Windows type %r is only available after "
                           "you call ffi.set_unicode()" % (commontype,))
        else:
            if commontype == cdecl:
                raise FFIError(
                    "Unsupported type: %r.  Please look at "
        "http://cffi.readthedocs.io/en/latest/cdef.html#ffi-cdef-limitations "
                    "and file an issue if you think this type should really "
                    "be supported." % (commontype,))
            result, quals = parser.parse_type_and_quals(cdecl)   # recursive

        assert isinstance(result, model.BaseTypeByIdentity)
        _CACHE[commontype] = result, quals
        return result, quals


# ____________________________________________________________
# extra types for Windows (most of them are in commontypes.c)


def win_common_types():
    return {
        "UNICODE_STRING": model.StructType(
            "_UNICODE_STRING",
            ["Length",
             "MaximumLength",
             "Buffer"],
            [model.PrimitiveType("unsigned short"),
             model.PrimitiveType("unsigned short"),
             model.PointerType(model.PrimitiveType("wchar_t"))],
            [-1, -1, -1]),
        "PUNICODE_STRING": "UNICODE_STRING *",
        "PCUNICODE_STRING": "const UNICODE_STRING *",

        "TBYTE": "set-unicode-needed",
        "TCHAR": "set-unicode-needed",
        "LPCTSTR": "set-unicode-needed",
        "PCTSTR": "set-unicode-needed",
        "LPTSTR": "set-unicode-needed",
        "PTSTR": "set-unicode-needed",
        "PTBYTE": "set-unicode-needed",
        "PTCHAR": "set-unicode-needed",
        }

if sys.platform == 'win32':
    COMMON_TYPES.update(win_common_types())

Directory Contents

Dirs: 1 × Files: 19

Name Size Perms Modified Actions
- drwxr-xr-x 2023-12-15 03:25:04
Edit Download
39.72 KB lrw-r--r-- 2023-10-14 23:41:04
Edit Download
41.10 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
5.59 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
2.63 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
38.33 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
666 B lrw-r--r-- 2018-02-27 18:15:41
Edit Download
3.95 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
747 B lrw-r--r-- 2018-02-27 18:15:41
Edit Download
21.05 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
5.84 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
61.93 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
8.01 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
40.50 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
26.05 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
10.94 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
3.71 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
11.86 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
15.65 KB lrw-r--r-- 2018-02-27 18:15:41
Edit Download
479 B lrw-r--r-- 2018-02-27 18:15:41
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).