inetd
/* $Id$ */
/* Copyright (c) 2011 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Servers inetd */
/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <assert.h>
#include <stdlib.h>
#ifdef DEBUG
# include <stdio.h>
#endif
#include <string.h>
#include "token.h"
/* Token */
/* variables */
char * sTokenCode[TC_NULL] = {
"TC_EOF",
"TC_NEWLINE",
"TC_NUMBER",
"TC_SPACE",
"TC_TAB",
"TC_WORD"
};
TokenCode TS_NEWLINE[] = { TC_SPACE, TC_TAB, TC_NEWLINE, TC_NULL };
TokenCode TS_NEWLINE_LIST[] = { TC_SPACE, TC_TAB, TC_NEWLINE, TC_NULL };
TokenCode TS_PROGRAM_ARGUMENT[] = { TC_WORD, TC_NULL };
TokenCode TS_SERVICE[] = { TC_WORD, TC_NULL };
TokenCode TS_SPACE[] = { TC_SPACE, TC_TAB, TC_NULL };
/* functions */
/* token_new */
Token * token_new(TokenCode code, char * string)
{
Token * t;
if((t = malloc(sizeof(Token))) == NULL)
return NULL;
t->code = code;
t->string = NULL;
if(string != NULL)
if((t->string = strdup(string)) == NULL)
{
free(t);
return NULL;
}
#ifdef DEBUG
fprintf(stderr, "%s%s%s%s%s", "token_new(", sTokenCode[code],
", \"", string == NULL ? "NULL" : string, "\")\n");
#endif
return t;
}
void token_delete(Token * t)
{
assert(t != NULL);
free(t->string);
free(t);
}
int token_in_set(Token * t, TokenSet ts)
{
assert(t != NULL);
for(; *ts != TC_NULL && t->code != *ts; ts++);
return *ts != TC_NULL;
}