[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Fix conversions from pointer to int and vice ve
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH] Fix conversions from pointer to int and vice versa |
Date: |
Thu, 24 Feb 2011 08:21:36 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) |
Stefan Weil <address@hidden> 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 <address@hidden>
> ---
> 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?
> @@ -295,7 +295,7 @@ static int qemu_event_init(void)
> goto fail;
> }
> qemu_set_fd_handler2(fds[0], NULL, qemu_event_read, NULL,
> - (void *)(unsigned long)fds[0]);
> + (void *)(intptr_t)fds[0]);
>
> io_thread_fd = fds[1];
> return 0;
Why can't you cast straight to void *?
[More of the same snipped...]