[PATCH 3/4] include: Define IoSkipCurrentIrpStackLocation

Sebastian Lackner sebastian at fds-team.de
Thu Oct 13 04:49:45 CDT 2016


On 13.10.2016 09:27, Aric Stewart wrote:
> On 10/13/16 9:09 AM, Alexandre Julliard wrote:
>> Sebastian Lackner <sebastian at fds-team.de> writes:
>>
>>> I assume you are looking at an old version then, and Microsoft fixed
>>> this mistake in the meantime. Windows 10 header files contain for example:
>>>
>>> --- snip ---
>>> FORCEINLINE
>>> VOID
>>> IoSkipCurrentIrpStackLocation (
>>>     _Inout_ PIRP Irp
>>> )
>>> [...]
>>> {
>>>     NT_ASSERT(Irp->CurrentLocation <= Irp->StackCount);
>>>     Irp->CurrentLocation++;
>>>     Irp->Tail.Overlay.CurrentStackLocation++;
>>> }
>>> --- snip ---
>>>
>>> Nevertheless, I think both "{...}" and using an inline function is fine
>>> in this case.
>>
>> It should be either an inline function (preferred) or a "do {} while(0)"
>> block. A "{...}" block will cause syntax errors in some cases.

@Alexandre:
I know that {...} can cause problems, but didn't object because it is also used in
some Windows header files. Nevertheless, you are right, lets better do it the right
way. ;)

>>
> 
> To do an inline function, which you prefer, would you like it in those  #ifdef blocks?
> 
> Like this?
> 
> #ifdef NONAMELESSUNION
> # ifdef NONAMELESSSTRUCT
> #  define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation)
> #  define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation - 1)
>    inline void IoSkipCurrentIrpStackLocation(IRP *_Irp) {_Irp->Tail.Overlay.s.u2.CurrentStackLocation++; _Irp->CurrentLocation++;}
> # else

@Aric:
Its up to you if you want to define it in the #ifdef blocks or below, but you
definitely need to handle the different combinations of NONAMELESSUNION/
NONAMELESSSTRUCT to make sure it compiles fine. Please note that the function should
be marked as "static inline", not just "inline". Also, you can rename "_Irp" to "irp"
because there is no longer any risk of name collisions when using an inline function.

Regards,
Sebastian




More information about the wine-devel mailing list