/*
* Copyright (c) 2004, 2006 Sendmail, Inc. and its suppliers.
* All rights reserved.
*
* By using this file, you agree to the terms and conditions set
* forth in the LICENSE file which can be found at the top level of
* the sendmail distribution.
*
* $Id: sm-conf-token.h,v 1.7 2006/01/09 19:06:25 ca Exp $
*/
#ifndef sm_conf_TOKEN_H
#define sm_conf_TOKEN_H 1
#if SM_LIBCONF_ALONE
#include <stdlib.h>
#include "sm-conf.h"
#else
#include "sm/sm-conf.h"
#endif
/* SM-CONF-TOKEN.H -- internal tokenizer declarations. */
enum sm_conf_token_type_E
{
SM_CONF_TOKEN_ERROR = -2,
SM_CONF_TOKEN_EOF = -1,
SM_CONF_TOKEN_NONE = 0,
SM_CONF_TOKEN_STRING = '"',
SM_CONF_TOKEN_ATOM = 'a',
SM_CONF_TOKEN_SEMI = ';',
SM_CONF_TOKEN_OBRACE = '{',
SM_CONF_TOKEN_CBRACE = '}',
SM_CONF_TOKEN_COMMA = ',',
SM_CONF_TOKEN_EQUAL = '='
};
#define SM_CONF_TOKEN_MAGIC SM_MAGIC('C', 'T', 'O', 'K')
#define SM_IS_CONF_TOKEN(sm_conf_token) \
SM_REQUIRE((sm_conf_token) != NULL && \
(sm_conf_token)->sm_magic == SM_CONF_TOKEN_MAGIC)
typedef struct sm_conf_TOKEN_S
{
sm_magic_T sm_magic;
enum sm_conf_token_type_E sct_type;
size_t sct_line;
char const *sct_text;
size_t sct_text_n;
enum SM_CONF_ERROR_E sct_error;
} sm_conf_token_T;
enum sm_conf_token_type_E sm_conf_token(
sm_conf_T *_smc,
sm_conf_token_T *_tok,
unsigned int _flags);
/*
** SM_CONF_TOKEN_FLAG_IDENTIFIER -- When reading atoms, stop at
** the first white space or non-identifier character. Don't
** combine multiple adjacent atoms, specials, and strings
** into one atom.
*/
#define SM_CONF_TOKEN_FLAG_IDENTIFIER 0x01
enum sm_conf_token_type_E sm_conf_token_lookahead(sm_conf_T const *_smc);
char const * sm_conf_token_string(
sm_conf_token_T *_tok,
char *_buf,
size_t _bufsize);
enum SM_CONF_ERROR_E sm_conf_token_backslash(
char **_s_ptr,
char const **_r_ptr,
char const *_e);
/* A good value for a buffer passed into sm_conf_token_string. */
#define SM_CONF_TOKEN_BUFFER_SIZE 200
int sm_conf_token_match(
sm_conf_T *_smc,
char const *_user,
size_t _user_n,
char const *_data,
size_t _data_n);
#endif /* sm_conf_TOKEN_H */
syntax highlighted by Code2HTML, v. 0.9.1