windows-nt/Source/XPSP1/NT/ds/security/tools/keytab2/opt/compare.c

133 lines
2.5 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
COMPARE.C
Checks to see if a command line option matches a given expectation.
Created, DavidCHR 6/9/1997
--*/
#include "private.h"
/* ParseCompare:
returns TRUE if the argument matches the expectation of pEntry */
BOOL
ParseCompare( optionStruct *pEntry,
ULONG flags,
PCHAR arg ) {
CHAR buffer[ 255 ];
switch( pEntry->flags & OPT_MUTEX_MASK ) {
case OPT_CONTINUE:
case OPT_PAUSE:
case OPT_DUMMY:
if ( pEntry->cmd ) {
OPTIONS_DEBUG( "ParseCompare: skipping useless option ( %s, 0x%x)\n",
pEntry->cmd,
pEntry->flags & OPT_MUTEX_MASK );
}
return FALSE;
case OPT_STRING:
case OPT_INT:
case OPT_STOP_PARSING:
case OPT_LONG:
case OPT_BOOL:
case OPT_HELP:
case OPT_FLOAT:
case OPT_FUNC:
case OPT_ENUMERATED:
case OPT_FUNC2:
#ifdef WINNT
case OPT_USTRING:
case OPT_WSTRING:
#endif
if ( pEntry->cmd ) {
OPTIONS_DEBUG( "ParseCompare: option ( %s, 0x%x) is \"normal\".\n",
pEntry->cmd,
pEntry->flags & OPT_MUTEX_MASK );
} else {
ASSERT_NOTREACHED( "Nobody should EVER specify a NULL command field"
" in an option structure. "
"It's just plain dumb." );
return FALSE;
}
break;
case OPT_SUBOPTION:
/* copy everything before the colon into a buffer, then
string-compare the buffer-- suboptions have the form:
[+|-|/]option:suboption:suboption */
OPTIONS_DEBUG( "ParseCompare: Suboption... " );
{
ULONG i;
for ( i = 0 ; arg[i] != ':' ; i++ ) {
if ( arg[i] == '\0' ) {
OPTIONS_DEBUG(" no colon. This cannot be a suboption.\n" );
return FALSE;
}
OPTIONS_DEBUG("%c", arg[i] );
buffer[i] = arg[i];
}
buffer[i] = '\0';
arg = buffer;
break;
}
default:
#if (HIGHEST_OPTION_SUPPORTED != OPT_STOP_PARSING )
#error "new options? update this switch statement or bad things will happen."
#endif
ASSERT_NOTREACHED( "unknown option type-- your COMPAT library is "
"probably out of date. ssync security\\compat "
"and rebuild, then relink your project." );
return FALSE;
}
OPTIONS_DEBUG( "Comparing \"%s\" against \"%s\"...",
arg, pEntry->cmd );
if ( STRCASECMP( arg, pEntry->cmd ) == 0 ) {
OPTIONS_DEBUG( "equal!\n" );
return TRUE;
} else {
OPTIONS_DEBUG( "not equal\n" );
return FALSE;
}
ASSERT_NOTREACHED( "Should never get here" );
}