[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] [Highwire] gcc4
On Mon, 06 Sep 2010 11:37:53 , Vincent Rivière <vincent.riviere@freesbee.fr> wrote:
> Peter Slegg wrote:
> > *((long **)p_answ)++/*[3..4]*/ = gsi_;
>
> Split that into 2 lines (untested):
> *((long **)p_answ)/*[3..4]*/ = gsi_;
> p_answ += 2;
>
> Still not type clean, but it will work as expected.
>
Those original lines were in a block of code that had two versions:
case GS_REQUEST:
{
#if 1 /* an optimized version of the below original */
const GS_INFO *sender;
short answ[8], *p_answ = answ;
long *gsi_ = (long *)gsi;
*p_answ++ /*[0]*/ = GS_REPLY;
*p_answ++ /*[1]*/ = gl_apid;
*p_answ++ /*[2]*/ = 0;
/* *((long **)p_answ)++ //[3..4]// = gsi_; */
*((long **)p_answ) /*[3..4]*/ = gsi_;
p_answ += 2;
*gsi_++ = sizeof(GS_INFO);
*gsi_++ = (0x0120L << 16) ¦ GSM_COMMAND;
*gsi_ = 0L;
/* *((long *)p_answ)++ //[5..6]// = 1; */
*((long *)p_answ) /*[5..6]*/ = 1;
p_answ += 2;
*p_answ /*[7]*/ = msg[7];
sender = *(GS_INFO **)&msg[3];
if (sender) {
if (sender->version >= 0x0070) {
*--p_answ/*[6]*/ = 0;
gsapp = msg[1];
}
}
#else
const GS_INFO *sender = *(GS_INFO **)&msg[3];
WORD answ[8];
answ[0] = GS_REPLY;
answ[1] = gl_apid;
answ[2] = 0;
answ[3] = 0;
answ[4] = 0;
answ[5] = 0;
answ[6] = 1;
answ[7] = msg[7];
gsi->len = sizeof(GS_INFO);
gsi->version = 0x0120;
gsi->msgs = GSM_COMMAND;
gsi->ext = 0L;
*(const GS_INFO **)&answ[3] = gsi;
if (sender)
{
if (sender->version >= 0x0070)
{
answ[6] = 0;
gsapp = msg[1];
}
}
#endif
I tried the unoptimised version but I think it is causing HW to crash
so I have switched back to the optimised one that all recent betas
are using.
Now I am back to dealing with:
error: cast discards qualifiers from pointer target type
const char *cmd = *(const char **)&msg[3];
you would think that all those const would keep it happy ;-)
Peter