1 /* $NetBSD: match_list.h,v 1.2 2017/02/14 01:16:49 christos Exp $ */ 2 3 #ifndef _MATCH_LIST_H_INCLUDED_ 4 #define _MATCH_LIST_H_INCLUDED_ 5 6 /*++ 7 /* NAME 8 /* match_list 3h 9 /* SUMMARY 10 /* generic list-based pattern matching 11 /* SYNOPSIS 12 /* #include <match_list.h> 13 /* DESCRIPTION 14 /* .nf 15 16 /* 17 * Utility library. 18 */ 19 #include <argv.h> 20 #include <vstring.h> 21 22 /* 23 * External interface. 24 */ 25 typedef struct MATCH_LIST MATCH_LIST; 26 27 typedef int (*MATCH_LIST_FN) (MATCH_LIST *, const char *, const char *); 28 29 struct MATCH_LIST { 30 char *pname; /* used in error messages */ 31 int flags; /* processing options */ 32 ARGV *patterns; /* one pattern each */ 33 int match_count; /* match function/argument count */ 34 MATCH_LIST_FN *match_func; /* match functions */ 35 const char **match_args; /* match arguments */ 36 VSTRING *fold_buf; /* case-folded pattern string */ 37 int error; /* last operation */ 38 }; 39 40 #define MATCH_FLAG_NONE 0 41 #define MATCH_FLAG_PARENT (1<<0) 42 #define MATCH_FLAG_RETURN (1<<1) 43 #define MATCH_FLAG_ALL (MATCH_FLAG_PARENT | MATCH_FLAG_RETURN) 44 45 extern MATCH_LIST *match_list_init(const char *, int, const char *, int,...); 46 extern int match_list_match(MATCH_LIST *,...); 47 extern void match_list_free(MATCH_LIST *); 48 49 /* 50 * The following functions are not part of the public interface. These 51 * functions may be called only through match_list_match(). 52 */ 53 extern int match_string(MATCH_LIST *, const char *, const char *); 54 extern int match_hostname(MATCH_LIST *, const char *, const char *); 55 extern int match_hostaddr(MATCH_LIST *, const char *, const char *); 56 57 /* LICENSE 58 /* .ad 59 /* .fi 60 /* The Secure Mailer license must be distributed with this software. 61 /* AUTHOR(S) 62 /* Wietse Venema 63 /* IBM T.J. Watson Research 64 /* P.O. Box 704 65 /* Yorktown Heights, NY 10598, USA 66 /*--*/ 67 68 #endif 69