#ifndef _SYSEVENT_CONF_MOD_H
#define _SYSEVENT_CONF_MOD_H
#ifdef __cplusplus
extern "C" {
#endif
#define DBG_TEST 1
#define DBG_EXEC 2
#define DBG_EVENTS 3
#define DBG_MATCHES 4
#define DBG_MACRO 5
#define DBG_CONF_FILE 6
#define DBG_DETAILED 7
#define SYSEVENT_CONFIG_DIR "/etc/sysevent/config"
#define LOCK_FILENAME "/var/run/syseventconf.lock"
typedef struct conftab {
char *cf_conf_file;
struct conftab *cf_next;
} conftab_t;
typedef struct syseventtab {
char *se_conf_file;
int se_lineno;
char *se_vendor;
char *se_publisher;
char *se_class;
char *se_subclass;
char *se_user;
char *se_reserved1;
char *se_reserved2;
char *se_path;
char *se_args;
uid_t se_uid;
gid_t se_gid;
struct syseventtab *se_next;
} syseventtab_t;
typedef struct sysevent_hdr_info {
char *class;
char *subclass;
char *vendor;
char *publisher;
} sysevent_hdr_info_t;
typedef struct str {
char *s_str;
int s_len;
int s_alloc;
int s_hint;
} str_t;
typedef struct cmdqueue {
sysevent_t *event;
struct cmdqueue *next;
} cmdqueue_t;
enum {
CONFD_STATE_OK,
CONFD_STATE_NOT_RUNNING,
CONFD_STATE_STARTED,
CONFD_STATE_ERR,
CONFD_STATE_DISABLED
};
static char *skip_spaces(char **cpp);
static char *next_field(char **cpp);
static void *sc_malloc(size_t n);
static void *sc_realloc(void *p, size_t current, size_t n);
static void sc_free(void *p, size_t n);
static char *sc_strdup(char *cp);
static void sc_strfree(char *s);
static str_t *initstr(int hint);
static void freestr(str_t *str);
static void resetstr(str_t *str);
static int strcopys(str_t *str, char *s);
static int strcats(str_t *str, char *s);
static int strcatc(str_t *str, int c);
static char *fstrgets(str_t *str, FILE *fp);
static void strtrunc(str_t *str, int pos);
static void build_event_table(void);
static void free_event_table(void);
static int enter_lock(char *lock_file);
static void exit_lock(int lock_fd, char *lock_file);
static str_t *snip_identifier(char *id, char **end);
static str_t *snip_delimited_identifier(char *id, char **end);
static char *se_attr_type_to_str(int se_attr_type);
static str_t *find_macro_definition(sysevent_t *ev, nvlist_t *nvlist,
syseventtab_t *sep, char *token, sysevent_hdr_info_t *hdr);
static int expand_macros(sysevent_t *ev, nvlist_t *nvlist,
syseventtab_t *sep, str_t *line, sysevent_hdr_info_t *hdr);
static void start_syseventconfd(void);
static int system1(const char *s_path, const char *s);
static void abort_cmd_queue(void);
static int queue_event(sysevent_t *ev, syseventtab_t *sep,
sysevent_hdr_info_t *hdr);
static int transport_event(sysevent_t *cmd);
static void transport_queued_events(void);
static int sysevent_conf_event(sysevent_t *ev, int flag);
#ifdef __cplusplus
}
#endif
#endif