[Python-Dev] Fwd: Removal of GIL through refcounting removal.

Thomas Heller theller at ctypes.org
Fri Oct 31 16:04:18 CET 2008


Victor Stinner schrieb:
> Le Friday 31 October 2008 14:13:01 Christian Heimes, vous avez écrit :
>> ctypes is also missing utilities to write code that works on 32 and
>> 64bit platforms. Without a tool like
>> http://pypi.python.org/pypi/ctypes_configure it's very hard and tedious
>> to avoid and fix segfaults.
> 
> I wrote some ctypes binding and some ctypes tools are missing. The most 
> important lacks are:
>  - get_errno()
>  - size_t and <stdint.h> types
> 
> You may be interrested by my modules:

Some of the problems you list here have already been fixed in Python 2.6:

> 
> get errno value:
> http://python-ptrace.hachoir.org/trac/browser/trunk/ptrace/ctypes_errno.py
> (ctypes_support has a get_errno function)

A new calling convention has been added for *safe* access to errno.

> open the C library:
> http://python-ptrace.hachoir.org/trac/browser/trunk/ptrace/ctypes_libc.py
> (ok, code is trivial, it's not critical to integrate it to ctypes)

This code is not in ctypes, but with Python2.6 it will also work on windows.

> *size_t* and <stdint.h> types!
> http://python-ptrace.hachoir.org/trac/browser/trunk/ptrace/ctypes_stdint.py
> (my module is incomplete, some types are missing)

Well, the signed types are named c_int8, c_uint8, and so on.
size_t is named c_size_t, please look into Lib/ctypes/__init__.py.
IIRC, these types are present event longer.

> Some functions to ease ctypes development:
> http://python-ptrace.hachoir.org/trac/browser/trunk/ptrace/ctypes_tools.py
>  - bytes2type() and bytes2array() are useful to convert a bytes array
>    to a ctypes object

There are also new ctypes methods in Python 2.6 .from_buffer() and .from_buffer_copy()
which should cover this use case.

An example from your module:

> 124 	def bytes2type(bytes, type):
> 125 	    """
> 126 	    Cast a bytes string to an objet of the specified type.
> 127 	    """
> 128 	    return cast(bytes, POINTER(type))[0]
> 129 	

Personally I would prefer to spell out 'cast(bytes, POINTER(type))[0]' instead of
documenting and learning what bytes2type() does.

> Should I open issues?
> 

Please decide yourself.

Thanks,
Thomas



More information about the Python-Dev mailing list