expandnode
struct expandnode *xn;
struct expandnode *xn;
expand_cmp(struct expandnode *e1, struct expandnode *e2)
struct expandnode *p1, *p2;
struct expandnode xn;
static const char *expandnode_info(struct expandnode *);
expandnode_info(struct expandnode *e)
struct expandnode *
expand_lookup(struct expand *expand, struct expandnode *key)
RB_GENERATE(expandtree, expandnode, entry, expand_cmp);
struct expandnode *xn;
expand_insert(struct expand *expand, struct expandnode *node)
struct expandnode *xn;
struct expandnode *xn;
struct expandnode *xn;
lka_expand(struct lka_session *lks, struct rule *rule, struct expandnode *xn)
struct expandnode node;
struct expandnode *node;
struct expandnode *);
static struct expandnode *
lka_find_ancestor(struct expandnode *xn, enum expand_type type)
struct expandnode *);
lka_submit(struct lka_session *lks, struct rule *rule, struct expandnode *xn)
struct expandnode xn;
struct expandnode *xn;
struct expandnode xn;
int expand_cmp(struct expandnode *, struct expandnode *);
void expand_insert(struct expand *, struct expandnode *);
struct expandnode *expand_lookup(struct expand *, struct expandnode *);
RB_PROTOTYPE(expandtree, expandnode, nodes, expand_cmp);
int text_to_expandnode(struct expandnode *, const char *);
const char *expandnode_to_text(struct expandnode *);
RB_ENTRY(expandnode) entry;
TAILQ_ENTRY(expandnode) tq_entry;
struct expandnode *parent;
RB_HEAD(expandtree, expandnode) tree;
TAILQ_HEAD(xnodes, expandnode) *queue;
struct expandnode *parent;
static int alias_is_filter(struct expandnode *, const char *, size_t);
static int alias_is_username(struct expandnode *, const char *, size_t);
static int alias_is_address(struct expandnode *, const char *, size_t);
static int alias_is_filename(struct expandnode *, const char *, size_t);
static int alias_is_include(struct expandnode *, const char *, size_t);
static int alias_is_error(struct expandnode *, const char *, size_t);
text_to_expandnode(struct expandnode *expandnode, const char *s)
if (alias_is_error(expandnode, s, l) ||
alias_is_include(expandnode, s, l) ||
alias_is_filter(expandnode, s, l) ||
alias_is_filename(expandnode, s, l) ||
alias_is_address(expandnode, s, l) ||
alias_is_username(expandnode, s, l))
expandnode_to_text(struct expandnode *expandnode)
switch (expandnode->type) {
return expandnode->u.user;
return mailaddr_to_text(&expandnode->u.mailaddr);
alias_is_filter(struct expandnode *alias, const char *line, size_t len)
alias_is_username(struct expandnode *alias, const char *line, size_t len)
alias_is_address(struct expandnode *alias, const char *line, size_t len)
alias_is_filename(struct expandnode *alias, const char *line, size_t len)
alias_is_include(struct expandnode *alias, const char *line, size_t len)
alias_is_error(struct expandnode *alias, const char *line, size_t len)