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.
 
 
 
 
 
 

163 lines
3.6 KiB

/* Copyright (c) 1994, Microsoft Corporation, all rights reserved
**
** parambuf.c
** Double-NUL terminated buffer of "key=value" parameter routines.
**
** 03/14/94 Steve Cobb
*/
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#define INCL_PARAMBUF
#include "ppputil.h"
VOID
AddFlagToParamBuf(
IN CHAR* pszzBuf,
IN CHAR* pszKey,
IN BOOL fValue )
/* Add a "key=value" entry with key 'pszKey' and value 'fValue' to
** double-NUL terminated buffer of "key=value"s 'pszzBuf'.
*/
{
AddStringToParamBuf( pszzBuf, pszKey, (fValue) ? "1" : "0" );
}
VOID
AddLongToParamBuf(
IN CHAR* pszzBuf,
IN CHAR* pszKey,
IN LONG lValue )
/* Add a "key=value" entry with key 'pszKey' and value 'lValue' to
** double-NUL terminated buffer of "key=value"s 'pszzBuf'.
*/
{
CHAR szNum[ 33 + 1 ];
_ltoa( lValue, szNum, 10 );
AddStringToParamBuf( pszzBuf, pszKey, szNum );
}
VOID
AddStringToParamBuf(
IN CHAR* pszzBuf,
IN CHAR* pszKey,
IN CHAR* pszValue )
/* Add a "key=value" entry with key 'pszKey' and value 'pszValue' to
** double-NUL terminated buffer of "key=value"s 'pszzBuf'.
*/
{
CHAR* psz;
INT cb;
for (psz = pszzBuf; (cb = strlen( psz )) > 0; psz += cb + 1)
;
if (!pszValue)
pszValue = "";
strcpy( psz, pszKey );
strcat( psz, "=" );
strcat( psz, pszValue );
psz[ strlen( psz ) + 1 ] = '\0';
}
VOID
ClearParamBuf(
IN OUT CHAR* pszzBuf )
/* Clears double-NUL terminated buffer of "key=value"s 'pszzBuf'.
*/
{
pszzBuf[ 0 ] = pszzBuf[ 1 ] = '\0';
}
BOOL
FindFlagInParamBuf(
IN CHAR* pszzBuf,
IN CHAR* pszKey,
IN BOOL* pfValue )
/* Loads caller's 'pfValue' with the flag value associated with the key
** 'pszKey' in double-NUL terminated buffer of "key=value"s 'pszzBuf'.
**
** Returns true if the parameter was found, false otherwise.
*/
{
CHAR szBuf[ 2 ];
if (FindStringInParamBuf( pszzBuf, pszKey, szBuf, 2 ))
{
*pfValue = (szBuf[ 0 ] == '1');
return TRUE;
}
return FALSE;
}
BOOL
FindLongInParamBuf(
IN CHAR* pszzBuf,
IN CHAR* pszKey,
IN LONG* plValue )
/* Loads caller's 'plValue' with the long value associated with the key
** 'pszKey' in double-NUL terminated buffer of "key=value"s 'pszzBuf'.
**
** Returns true if the parameter was found, false otherwise.
*/
{
CHAR szBuf[ 33 + 1 ];
if (FindStringInParamBuf( pszzBuf, pszKey, szBuf, 33 ))
{
*plValue = atol( szBuf );
return TRUE;
}
return FALSE;
}
BOOL
FindStringInParamBuf(
IN CHAR* pszzBuf,
IN CHAR* pszKey,
IN CHAR* pchValueBuf,
IN DWORD cbValueBuf )
/* Loads caller's 'pchValueBuf' with the value associated with the key
** 'pszKey' in double-NUL terminated buffer of "key=value"s 'pszzBuf'.
** The string is truncated at 'cbValueBuf' if necessary.
**
** Returns true if the parameter was found, false otherwise.
*/
{
INT cbSearchKey = strlen( pszKey );
CHAR* psz;
INT cb;
for (psz = pszzBuf; (cb = strlen( psz )) > 0; psz += cb + 1)
{
CHAR* pszKeyEnd = strchr( psz, '=' );
INT cbKey = (pszKeyEnd) ? (LONG)(pszKeyEnd - psz) : 0;
if (cbKey == cbSearchKey && _strnicmp( psz, pszKey, cbKey ) == 0)
{
strncpy( pchValueBuf, pszKeyEnd + 1, cbValueBuf );
return TRUE;
}
}
return FALSE;
}