This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: GCC 4.x fixes for Hurdy bits (0/5)
- From: "Neal H. Walfield" <neal at walfield dot org>
- To: "Alfred M. Szmidt" <ams at gnu dot org>
- Cc: libc-alpha at sources dot redhat dot com
- Date: Fri, 10 Jun 2005 14:46:49 +0100
- Subject: Re: GCC 4.x fixes for Hurdy bits (0/5)
- References: <E1DgcwL-0003zx-OW@fencepost.gnu.org>
Have you tested this?
> name = ty->msgtl_header.msgt_name;
> size = ty->msgtl_header.msgt_size;
> number = ty->msgtl_header.msgt_number;
> - (char *) ty += sizeof (mach_msg_type_t);
> + ty += sizeof (mach_msg_type_t);
This looks wrong. The old code will advance TY by sizeof
(mach_msg_type_t) bytes while the new code will advance TY by sizeof
(mach_msg_type_t) * sizeof (*ty) bytes.
> /* calculate length of data in bytes, rounding up */
> - (char *) ty += (((((number * size) + 7) >> 3)
> - + sizeof (mach_msg_type_t) - 1)
> - &~ (sizeof (mach_msg_type_t) - 1));
> + ty += (((((number * size) + 7) >> 3)
> + + sizeof (mach_msg_type_t) - 1)
> + &~ (sizeof (mach_msg_type_t) - 1));
Likewise here.
> }
> else
> {
> clean_ports (*(void **) ty,
> ty->msgtl_header.msgt_deallocate);
> - ++(void **) ty;
> + ++ty;
And here.
> *t++ = io2mach_type (1, _IOTS (integer_t));
> - *((integer_t *) t)++ = (integer_t) arg;
> + *(integer_t *) t = (integer_t) arg;
> + t += sizeof (integer_t);
And here.
> #else
> - *((integer_t *) p)++ = (integer_t) arg;
> + *(integer_t *) p = (integer_t) arg;
> + t += sizeof (integer_t);
And here I think you want to advance P and not T.