On 10/13/16 9:09 AM, Alexandre Julliard wrote:
Sebastian Lackner <sebastian(a)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.
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