This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]