[SLOF] [PATCH v2 1/2] usb/storage: Invert the logic of the IF-statements

Thomas Huth thuth at redhat.com
Thu Dec 13 07:09:15 AEDT 2018


On 2018-12-12 21:02, Laurent Vivier wrote:
> On 12/12/2018 20:23, Thomas Huth wrote:
>> On 2018-12-12 15:31, Laurent Vivier wrote:
>>> to prepare write implementation
>>>
>>> Signed-off-by: Laurent Vivier <lvivier at redhat.com>
>>> ---
>>>  slof/fs/usb/dev-storage.fs | 39 +++++++++++++++++++-------------------
>>>  1 file changed, 19 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/slof/fs/usb/dev-storage.fs b/slof/fs/usb/dev-storage.fs
>>> index 94f8421..fe5af1c 100644
>>> --- a/slof/fs/usb/dev-storage.fs
>>> +++ b/slof/fs/usb/dev-storage.fs
>>> @@ -107,23 +107,23 @@ scsi-open
>>>      TO resp-size
>>>      TO resp-buffer
>>>      udev USB_PIPE_OUT td-buf td-buf-phys dma-buf-phys usb>cmd 1F
>>> -    usb-transfer-bulk IF \ transfer CBW
>>> -	resp-size IF
>>> -	    d# 125 us
>>> -	    udev USB_PIPE_IN td-buf td-buf-phys resp-buffer resp-size
>>> -	    usb-transfer-bulk 1 = not IF \ transfer data
>>> -	        usb-disk-debug?	IF ." Data phase failed " cr THEN
>>> -		\ FALSE EXIT
>>> -		\ in case of a stall/halted endpoint we clear the halt
>>> -		\ Fall through and try reading the CSW
>>> -	    THEN
>>> -	THEN
>>> -	d# 125 us
>>> -	udev USB_PIPE_IN td-buf td-buf-phys dma-buf-phys usb>csw 0D
>>> -	usb-transfer-bulk \ transfer CSW
>>> -    ELSE
>>> -	FALSE EXIT
>>> +    usb-transfer-bulk 1 = not IF
>>
>> In case you respin: Replace "= not" with "<>".
>> (sorry for not noticing this in v1 already!)
>>
>>> +        FALSE EXIT
>>>      THEN
>>> +    \ transfer CBW
>>> +    resp-size IF
>>> +        d# 125 us
>>> +        udev USB_PIPE_IN td-buf td-buf-phys resp-buffer resp-size
>>> +        usb-transfer-bulk 1 = not IF \ transfer data
>>
>> You only moved the code, but in case you respin, "= not" could be
>> replaced with "<>" here, too.
>>
>>> +            usb-disk-debug? IF ." Data phase failed " cr THEN
>>> +            \ FALSE EXIT
>>> +            \ in case of a stall/halted endpoint we clear the halt
>>> +            \ Fall through and try reading the CSW
>>> +        THEN
>>> +    THEN
>>> +    d# 125 us
>>> +    udev USB_PIPE_IN td-buf td-buf-phys dma-buf-phys usb>csw 0D
>>> +    usb-transfer-bulk \ transfer CSW
>>>  ;
>>>  
>>>  STRUCT \ cbw
>>> @@ -189,12 +189,11 @@ CONSTANT cbw-length
>>>  
>>>      \ Send it
>>>      dma-buf-phys usb>data usb-buf-len
>>> -    do-bulk-command IF
>>> -	dma-buf usb>data usb-buf-addr usb-buf-len move
>>> -    ELSE
>>> -        ." USB-DISK: Bulk commad failed!" cr
>>> +    do-bulk-command 1 = not IF
>>
>> "= not" ==> "<>"
>>
>> Or maybe you could even simply say:
>>
>>   do-bulk-command not IF
>>
>> ... since the C functions are simply returning "bool"s - and the
>> IF-statement in Forth does not care whether the "true" value on the
>> stack is -1 or 1.
> 
> ... but "not" doesn't like it:
> 
> 0 > 0 not .  -1  ok
> 0 > 1 not .  -2  ok
> 0 > -1 not .  0  ok

D'oh, sorry, I mix this up every couple of months ... you've got to use
"0=" instead of "not" in that case:

0 > 0 0= .  -1  ok
0 > 1 0= .  0  ok
0 > -1 0= .  0  ok

 Thomas



More information about the SLOF mailing list