FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
C++
Email
Print
Reprint

add to:
Del.icio.us
Digg
Google
Furl
Slashdot
Y! MyWeb
Blink
June 01, 1997

C++

(Page 3 of 9)

June 1997/Being Assertive in C/C++/Listing 2

Listing 2: Checking post-conditions of a function

class PipePreparer
{
  HANDLE ChildStdoutRead;
  HANDLE ChildStdoutWrite;
  HANDLE ChildStdinRead;
  HANDLE ChildStdinWrite;
  HANDLE ChildStdinWriteDup;
  HANDLE SaveStdout;
  HANDLE SaveStdin;

  void PipePreparer::Finish( bool ChildCreatedOK,
                           HANDLE* pParentIn,
                           HANDLE* pParentOut );

  ...
}

void PipePreparer::Finish( bool ChildCreatedOK,
                           HANDLE* pParentIn,
                           HANDLE* pParentOut )
{
  bool OK = ::CloseHandle( ChildStdoutWrite );
  ChildStdoutWrite = INVALID_HANDLE_VALUE;

  ::CloseHandle( ChildStdinRead );
  ChildStdinRead = INVALID_HANDLE_VALUE;

  if( OK && ChildCreatedOK )
  {
    pParentOut = ChildStdinWriteDup;
    ChildStdinWriteDup = INVALID_HANDLE_VALUE;

    pParentIn = ChildStdoutRead;
    ChildStdoutRead = INVALID_HANDLE_VALUE;
  }
  else
  {
    if( ChildStdinWriteDup != INVALID_HANDLE_VALUE )
    {
      ::CloseHandle( ChildStdinWriteDup );
      ChildStdinWriteDup = INVALID_HANDLE_VALUE;
    }

    if( ChildStdoutRead != INVALID_HANDLE_VALUE )
    {
      ::CloseHandle( ChildStdoutRead );
      ChildStdoutRead = INVALID_HANDLE_VALUE;
    }
  }

  ::SetStdHandle( STD_OUTPUT_HANDLE, SaveStdOut );
  ::SetStdHandle( STD_INPUT_HANDLE, SaveStdin );

  assert( ChildStdoutRead == INVALID_HANDLE_VALUE );
  assert( ChildStdoutWrite == INVALID_HANDLE_VALUE );
  assert( ChildStdinRead == INVALID_HANDLE_VALUE );
  assert( ChildStdinWrite == INVALID_HANDLE_VALUE );
  assert( ChildStdinWriteDup == INVALID_HANDLE_VALUE );
}
//End of File
Previous Page | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Next Page
RELATED ARTICLES
No Related Articles
TOP 5 ARTICLES
No Top Articles.



MICROSITES
FEATURED TOPIC

ADDITIONAL TOPICS

INFO-LINK