[ros-dev] Re: [ros-svn] [gdalsnes] 18113: -reorder InsertXscendingOrder macro argument order and update uses

Nathan Woods npwoods at cybercom.net
Wed Sep 28 01:14:36 CEST 2005


Gunnar Dalsnes wrote:

> In win32k i use macros for flow control in the NtUser syscalls 
> (functionally like a try/finally block) where its very important that 
> some cleanup (release a lock) is always done:
>
> BOOL NtFunc()
> {
>   DECLARE_RETURN(BOOL);
>
>   Lock();
>   if (Stuff) RETURN(FALSE);
>   ....
>   RETURN(TRUE);
>
> CLEANUP:
>   Unlock(Stuff);
>   DPRINT1("NtFunc returned %i\n", _ret_);
>   END_CLEANUP;
> }

Patterns like this can be done without macros.  I've always been partial 
to the following style:

BOOL NtFunc()
{
  BOOL bResult;
  void *pPointer = NULL;

  Lock();

  if (Stuff)
  {
    bResult = FALSE;
    goto cleanup;
  }
  ....

  bResult = TRUE;

cleanup:
  if (pPointer)
    free(pPointer);
  Unlock(stuff);
  DPRINT1("NtFunc returned %i\n", bResult);
  return bResult;
}

I know that many find goto's to be a crime against humanity, but I've 
always favored them for this sort of pattern.

-N


More information about the Ros-dev mailing list