ports/174689: lang/python27: 64-bit pointers returned by C library get reduced to 32-bit
Marcus von Appen
mva at FreeBSD.org
Tue Dec 25 15:00:01 UTC 2012
The following reply was made to PR ports/174689; it has been noted by GNATS.
From: Marcus von Appen <mva at FreeBSD.org>
To: rene at FreeBSD.org, bug-followup at FreeBSD.org
Cc: freebsd-python at FreeBSD.org
Subject: Re: ports/174689: lang/python27: 64-bit pointers returned by C
library get reduced to 32-bit
Date: Tue, 25 Dec 2012 15:51:54 +0100
--J/dobhs11T7y2rNN
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
> When initializing libmpg123.so.0 (audio/mpg123) from Python with CDLL,
> the 64-bit pointer value returned by mpg123_new(None, None) gets
> reduced to 32 bits. The equivalent program in C does not have this
> problem.
> from ctypes import *
>
> mpg123 =3D CDLL('libmpg123.so') # audio/mpg123
> print mpg123
>
> MPG123_OK =3D 0
> if mpg123.mpg123_init() !=3D MPG123_OK:
> print "mpg123_init() failed"
> else:
> mh =3D mpg123.mpg123_new(None, None)
[...]
I do not see that you provide any information to ctypes about how the
function mpg123_new() should behave. By default it will assume to return
a ctypes.c_int, which most likely will be a 4-byte value.
>>> import ctypes
>>> print ctypes.sizeof(ctypes.c_int)
4
Furthermore, the mpg123.h header declares the function as
mpg123_handle *mpg123_new(const char* decoder, int *error);
mpg123_handle is a struct typedef. Instead of using a 4-byte int, you
might be better of with properly declaring the arguments
(POINTER(c_char) and POINTER(c_int)) and return
value (c_void_p or a Structure stub) of the function within your ctypes
code.
=46rom what I can see on my test platform, it works properly according to
the basic ctypes definition.
Cheers
Marcus
--J/dobhs11T7y2rNN
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (FreeBSD)
iEYEARECAAYFAlDZvYoACgkQi68/ErJnpkcQpgCeMzjD3wGFbgM/ZG4DezZhJB3Y
MvIAoKTYzEaxKOO+COVfWKUjT35GzCkr
=bUdZ
-----END PGP SIGNATURE-----
--J/dobhs11T7y2rNN--
More information about the freebsd-python
mailing list