Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
Copyright (c) 1997-1999 Microsoft Corporation
*/
#include "sdppch.h"
#include "sdpgen.h"
#include "sdpver.h"
// maximum value in a ushort variable
const USHORT USHORT_MAX = -1;
// no transition table for the base class
// no need to set the start state as the parse engine is not used
SDP_VERSION::SDP_VERSION( ) : SDP_VALUE(SDP_INVALID_VERSION_FIELD, VERSION_STRING) {
}
void SDP_VERSION::InternalReset( ) { m_Version.Reset(); }
BOOL SDP_VERSION::InternalParseLine( IN OUT CHAR *&Line ) { CHAR SeparatorChar = '\0';
// identify the token. if one of the the separator characters is found, replace
// it by EOS and return the separator char. if none of the separator characters are
// found, return NULL (ex. if EOS found first, return NULL)
CHAR *Token = GetToken(Line, 1, NEWLINE_STRING, SeparatorChar);
// when the block goes out of scope,
// set the EOS character to the token separator character
LINE_TERMINATOR LineTerminator(Token, SeparatorChar);
// if there is no such token
if ( !LineTerminator.IsLegal() ) { SetLastError(m_ErrorCode); return FALSE; }
// advance the line to the start of the next token
Line += (LineTerminator.GetLength() + 1);
// get the session id decimal value
if ( !m_Version.ParseToken(Token) ) { SetLastError(SDP_INVALID_VERSION_FIELD); return FALSE; }
// check if the value is legal
if ( (USHORT_MAX == m_Version.GetValue()) || (CURRENT_SDP_VERSION < m_Version.GetValue()) ) { SetLastError(SDP_INVALID_VERSION_FIELD); return FALSE; }
INT_PTR Index;
// fill in the field and separator char arrays
try { Index = m_SeparatorCharArray.Add(CHAR_NEWLINE); } catch(...) { SetLastError(ERROR_OUTOFMEMORY); return FALSE; }
try { m_FieldArray.Add(&m_Version); } catch(...) { m_SeparatorCharArray.RemoveAt(Index);
SetLastError(ERROR_OUTOFMEMORY); return FALSE; }
return TRUE; }
|