From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=44384 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PsXI8-00082E-58 for qemu-devel@nongnu.org; Thu, 24 Feb 2011 04:15:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PsXI7-0003hm-1J for qemu-devel@nongnu.org; Thu, 24 Feb 2011 04:15:20 -0500 Received: from mx1.redhat.com ([209.132.183.28]:13754) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PsXI6-0003hg-Mc for qemu-devel@nongnu.org; Thu, 24 Feb 2011 04:15:18 -0500 Message-ID: <4D662216.2050207@redhat.com> Date: Thu, 24 Feb 2011 10:17:10 +0100 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] Fix conversions from pointer to int and vice versa References: <1298484556-5517-1-git-send-email-weil@mail.berlios.de> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Markus Armbruster Cc: Anthony Liguori , qemu-devel@nongnu.org Am 24.02.2011 08:21, schrieb Markus Armbruster: > Stefan Weil writes: > >> Here the int values fds[0], sigfd, s, sock and fd are converted >> to void pointers which are later converted back to an int value. >> >> These conversions should always use intptr_t instead of unsigned long. >> >> They are needed for environments where sizeof(long) != sizeof(void *). > > To be precise: when you want to cast a pointer to a signed integer type > and back without loss, intptr_t is the signed integer type to use. > > But here we're dealing with the opposite case: cast int to pointer and > back. > >> Signed-off-by: Stefan Weil >> --- >> cpus.c | 8 ++++---- >> migration-tcp.c | 4 ++-- >> migration-unix.c | 4 ++-- >> qemu-char.c | 4 ++-- >> 4 files changed, 10 insertions(+), 10 deletions(-) >> >> diff --git a/cpus.c b/cpus.c >> index 0f33945..3c4e1b8 100644 >> --- a/cpus.c >> +++ b/cpus.c >> @@ -267,7 +267,7 @@ static void qemu_event_increment(void) >> >> static void qemu_event_read(void *opaque) >> { >> - int fd = (unsigned long)opaque; >> + int fd = (intptr_t)opaque; >> ssize_t len; >> char buffer[512]; >> > > Why can't you cast straight to int? You would get warnings about a pointer being cast to an integer of different size (the behaviour is undefined if the integer is too small). I think you might also get a warning for the opposite direction. Kevin