Re: function ehci_hub_control in ehci-hub.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 3 Apr 2016, Navin P.S wrote:

> On Sat, Apr 2, 2016 at 8:00 PM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:
> > On Sat, 2 Apr 2016, Navin P.S wrote:
> >>regs->hostpc[(wIndex & 0xff) - 1];
> >
> > You're asking the question backwards.  wIndex is allowed to be 0
> > because the USB spec says so.  You can't argue with that.
> >
> > You should be asking why we initialize status_reg and hostpc_reg as
> > above.
> >.
> 
> Can i initialize them to NULL and only use them if wIndex is not zero
> and wIndex <= ports.

You can't use a NULL pointer!  You have to set it to a non-NULL value
before you can dereference it.

> I assign them goto error case statement.

I don't understand that sentence.

>  That would be a cleaner solution.

It would not be cleaner than leaving the code the way it is.

> >> This is only valid when we have regs->port_status and regs->hostpc and
> >> 1 more into the actual array but gcc catches this.
> >
> > No, it's always valid.  The C spec might not agree with me, but the
> > kernel doesn't use standard C.  It uses gcc, which is different from
> > the standard in quite a few ways.
> >
> 
> 
> If you had told me the size of port_status and hostpc is 65536
> atleast i wouldn't have a problem

I don't see why you have a problem anyway.  There's nothing wrong with
assigning a nonsense value to a pointer, as long as you don't try to
use it.  For example, your compiler might not like this program, but
the program won't cause an error when you run it:

int a[5];

int main()
{
	int *x = &a[-1];

	return 0;
}

>  because wIndex &0xff -1
> when casted to a unit16_t would be 65535 when wIndex is 0. The 1 is
> treated as a signed integer constant and wIndex is an unsigned
> uint16_t. So the value of expression is -1 in this case.
> 
> Please note i'm not talking about 0 sized arrays or 1 sized arrays
> inside struct.
> 
> 
> Can you please explain where gcc mentions this as valid ?
> https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions

It's probably not mentioned in there.

Alan Stern




--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux