/*-
* Copyright (c) 2003 Andrey Simonenko
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)$Id: confcommon.h,v 1.1.4.3 2007/05/11 16:29:59 simon Exp $
*/
#ifndef IPA_CONFCOMMON_H
#define IPA_CONFCOMMON_H
#ifndef SYM_PREFIX
# if defined (__GNUC__) && !defined(__ELF__)
# define SYM_PREFIX "_"
# endif
#endif
#ifndef CONF_INDENT
# define CONF_INDENT 4
#endif
struct get_arg_tbl {
void *argp;
int (*get_arg)(void *);
regex_t *reg;
};
#ifndef CONF_SECT_BUCKETS
# define CONF_SECT_BUCKETS 32 /* Must be power of 2. */
#endif
struct conf_sect_hentry {
SLIST_ENTRY(conf_sect_hentry) link;
u_int hash_value; /* Hashed value of sect_name. */
const char *sect_name; /* The same as sect_name in ipa_conf_sect{}. */
u_int idx; /* Index of section description in sections table. */
};
SLIST_HEAD(conf_sect_hash, conf_sect_hentry);
#ifndef CONF_PARAM_BUCKETS
# define CONF_PARAM_BUCKETS 64 /* Must be power of 2. */
#endif
struct conf_param_hentry {
SLIST_ENTRY(conf_param_hentry) link;
u_int hash_value; /* Hashed value of param_name. */
const char *param_name; /* The same as param_name in ipa_conf_param{}. */
u_int idx; /* Index of parameter description in parameters table. */
};
SLIST_HEAD(conf_param_hash, conf_param_hentry);
#define CONF_SECT_HENTRY_NSIZE 32
#define CONF_SECT_HENTRY_NALLOC 16
#define CONF_PARAM_HENTRY_NSIZE 64
#define CONF_PARAM_HENTRY_NALLOC 32
#define MONTHES_IN_YEAR 12
#define HOURS_IN_DAY 24
#define DAYS_IN_WEEK 7
#define SECONDS_IN_MINUTE (60)
#define MINUTES_IN_HOUR (60)
#define SECONDS_IN_HOUR (MINUTES_IN_HOUR * SECONDS_IN_MINUTE)
#define SECONDS_IN_DAY (HOURS_IN_DAY * SECONDS_IN_HOUR)
#define SECONDS_IN_WEEK (DAYS_IN_WEEK * SECONDS_IN_DAY)
#define KBYTE UINT64_C(1024)
#define MBYTE (UINT64_C(1024) * KBYTE)
#define GBYTE (UINT64_C(1024) * MBYTE)
#define TBYTE (UINT64_C(1024) * GBYTE)
#define PAT_TIME "^([[:digit:]]+[smh] ?)+$"
#define PAT_BYTES "^([[:digit:]]+[BKMGT] ?)+$"
extern const char *const conf_event_msg[];
extern regex_t reg_time;
extern regex_t reg_bytes;
extern const struct get_arg_tbl get_arg_tbl[];
#define RE_ERRBUF_SIZ 100
extern int re_errcode;
extern char re_errbuf[RE_ERRBUF_SIZ];
extern void re_form_errbuf(void);
extern const char *curmodfile;
extern const char *curparam;
extern const char *cursect;
extern void logconferr(const char *, ...) ATTR_FORMAT(printf, 1, 2);
extern void logconferrx(const char *, ...) ATTR_FORMAT(printf, 1, 2);
extern void mod_logconferr(const char *, int, const char *, va_list);
extern void mod_conf_regfree(ipa_conf_param *, ipa_conf_sect *);
extern int mod_conf_regcomp(const char *, ipa_conf_param *, ipa_conf_sect *);
extern int strto_uint32(uint32_t *, const char *, char **);
extern int strto_u_int(u_int *, const char *, char **);
extern int get_arg_uint64(void *);
extern int get_arg_time(void *);
extern int get_arg_bytes(void *);
extern int get_arg_per_cent(void *);
extern int need_nl;
extern int was_space;
extern int conf_indent;
extern int mod_indent;
extern void set_indent(int);
extern void print_space(void);
extern void print_time(const uint64_t *);
extern void print_value(const uint64_t *, u_int);
extern void print_boolean(int);
extern void print_bytes(const uint64_t *);
extern void print_string(const char *);
extern void print_param_name(const char *, const char *);
extern void print_args(const char *, va_list);
extern void print_eol(void);
extern void print_nl(void);
extern void print_param_end(void);
extern void print_sect_name(const char *, const char *);
extern void print_sect_begin(void);
extern void print_sect_end(void);
extern void *conf_sect_hentry_mzone;
extern void *conf_param_hentry_mzone;
extern int init_conf_tbls(const char *, int, ipa_conf_sect *, struct conf_sect_hash **, ipa_conf_param *, struct conf_param_hash **);
extern void deinit_conf_tbls(int, ipa_conf_sect *, struct conf_sect_hash *, ipa_conf_param *, struct conf_param_hash *);
extern const ipa_conf_sect *find_conf_sect(const ipa_conf_sect *, const struct conf_sect_hash *, const char *);
extern const ipa_conf_param *find_conf_param(const ipa_conf_param *, const struct conf_param_hash *, const char *);
extern int build_conf_regexp(void);
extern void *dl_lookup_sym(dl_handle, const char *);
#endif /* !IPA_CONFCOMMON_H */
syntax highlighted by Code2HTML, v. 0.9.1