Stefan Weil <w...@mail.berlios.de> 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 <w...@mail.berlios.de> > --- > 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...]