From owner-freebsd-python@FreeBSD.ORG Tue Dec 25 14:52:46 2012 Return-Path: Delivered-To: freebsd-python@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 718F2B9C; Tue, 25 Dec 2012 14:52:46 +0000 (UTC) (envelope-from mva@FreeBSD.org) Received: from smtprelay03.ispgateway.de (smtprelay03.ispgateway.de [80.67.31.30]) by mx1.freebsd.org (Postfix) with ESMTP id 238168FC12; Tue, 25 Dec 2012 14:52:45 +0000 (UTC) Received: from [89.182.39.125] (helo=localhost) by smtprelay03.ispgateway.de with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.68) (envelope-from ) id 1TnVrD-00062v-5g; Tue, 25 Dec 2012 15:51:51 +0100 Date: Tue, 25 Dec 2012 15:51:54 +0100 From: Marcus von Appen To: rene@FreeBSD.org, bug-followup@FreeBSD.org Subject: Re: ports/174689: lang/python27: 64-bit pointers returned by C library get reduced to 32-bit Message-ID: <20121225145154.GA1985@medusa.sysfault.org> Mail-Followup-To: rene@FreeBSD.org, bug-followup@FreeBSD.org, freebsd-python@FreeBSD.org References: <201212242330.qBONU8F4003854@freefall.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="J/dobhs11T7y2rNN" Content-Disposition: inline In-Reply-To: <201212242330.qBONU8F4003854@freefall.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Df-Sender: MTEyNTc0Mg== Cc: freebsd-python@FreeBSD.org X-BeenThere: freebsd-python@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Marcus von Appen List-Id: FreeBSD-specific Python issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 Dec 2012 14:52:46 -0000 --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--