72 #ifdef STRCASECMP_IN_STRINGS_H
86 static void match_service_compat(
ARGV *
argv)
91 for (cpp = argv->
argv; *cpp; cpp++) {
92 if (strrchr(*cpp,
'/') == 0 && (cp = strrchr(*cpp,
'.')) != 0)
103 char *saved_patterns =
mystrdup(patterns);
104 char *bp = saved_patterns;
107 while ((item =
mystrtok(&bp, delim)) != 0)
111 match_service_compat(list);
122 for (cpp = patterns; *cpp; cpp++)
125 match_service_compat(list);
133 const char *myname =
"match_service_match";
142 if (list->
argv[0] == 0)
148 if ((type = strrchr(name_type,
'/')) == 0 || *++type == 0)
149 msg_panic(
"%s: malformed service: \"%s\"; need \"name/type\" format",
155 for (cpp = list->
argv; (pattern = *cpp) != 0; cpp++) {
157 msg_info(
"%s: %s ~? %s", myname, name_type, pattern);
158 for (match = 1; *pattern ==
'!'; pattern++)
160 if (
strcasecmp(strchr(pattern,
'/') ? name_type : type, pattern) == 0) {
162 msg_info(
"%s: %s: found match", myname, name_type);
167 msg_info(
"%s: %s: no match", myname, name_type);
char * mystrdup(const char *str)
ARGV * argv_free(ARGV *argvp)
ARGV * match_service_init(const char *patterns)
NORETURN msg_panic(const char *fmt,...)
int match_service_match(ARGV *list, const char *name_type)
void argv_add(ARGV *argvp,...)
char * mystrtok(char **src, const char *sep)
ARGV * argv_alloc(ssize_t len)
void match_service_free(ARGV *list)
ARGV * match_service_init_argv(char **patterns)
int strcasecmp(const char *s1, const char *s2)
void argv_terminate(ARGV *argvp)
void msg_info(const char *fmt,...)