GCC 4.x fixes for Hurdy bits (0/5)

Neal H. Walfield neal@walfield.org
Fri Jun 10 13:46:00 GMT 2005


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.



More information about the Libc-alpha mailing list