コード例 #1
0
ファイル: trace.c プロジェクト: StarchLinux/m4
void
set_trace_flags(const char *s)
{
	char mode = 0;
	unsigned int f = 0;

	if (*s == '+' || *s == '-')
		mode = *s++;
	while (*s)
		f |= letter_to_flag(*s++);
	switch(mode) {
	case 0:
		trace_flags = f;
		break;
	case '+':
		trace_flags |= f;
		break;
	case '-':
		trace_flags &= ~f;
		break;
	}
}
コード例 #2
0
ファイル: flags.c プロジェクト: sean-brandt/tinymush
int cf_flag_name( int *vp, char *str, long extra, dbref player, char *cmd ) {
    char *numstr, *namestr, *tokst;

    FLAGENT *fp;

    int flagnum = -1;

    char *flagstr, *cp;

    numstr = strtok_r( str, " \t=,", &tokst );
    namestr = strtok_r( NULL, " \t=,", &tokst );

    if( numstr && ( strlen( numstr ) == 1 ) ) {
        flagnum = ( int ) strtol( numstr, ( char ** ) NULL, 10 );
    }
    if( ( flagnum < 0 ) || ( flagnum > 9 ) ) {
        cf_log_notfound( player, cmd, "Not a marker flag", numstr );
        return -1;
    }
    if( ( fp = letter_to_flag( *numstr ) ) == NULL ) {
        cf_log_notfound( player, cmd, "Marker flag", numstr );
        return -1;
    }
    /*
     * Our conditions: The flag name MUST start with an underscore. It
     * must not conflict with the name of any existing flag. There is a
     * KNOWN MEMORY LEAK here -- if you name the flag and rename it
     * later, the old bit of memory for the name won't get freed. This
     * should pretty much never happen, since you're not going to run
     * around arbitrarily giving your flags new names all the time.
     */

    flagstr = xstrprintf( "cf_flag_name", "_%s", namestr );
    if( strlen( flagstr ) > 31 ) {
        cf_log_syntax( player, cmd, "Marker flag name too long: %s",
                       namestr );
        XFREE( flagstr, "cf_flag_name" );
    }
    for( cp = flagstr; cp && *cp; cp++ ) {
        if( !isalnum( *cp ) && ( *cp != '_' ) ) {
            cf_log_syntax( player, cmd,
                           "Illegal marker flag name: %s", namestr );
            XFREE( flagstr, "cf_flag_name" );
            return -1;
        }
        *cp = tolower( *cp );
    }

    if( hashfind( flagstr, &mudstate.flags_htab ) ) {
        XFREE( flagstr, "cf_flag_name" );
        cf_log_syntax( player, cmd, "Marker flag name in use: %s",
                       namestr );
        return -1;
    }
    for( cp = flagstr; cp && *cp; cp++ ) {
        *cp = toupper( *cp );
    }

    fp->flagname = ( const char * ) flagstr;
    hashadd( ( char * ) fp->flagname, ( int * ) fp, &mudstate.flags_htab, 0 );

    return 0;
}