+illegal:
+ error(_("Illegal datestamp expression %s"),dateexp);
+ /*NOTREACHED*/
+}
+
+
+int
+match_level(
+ const char * levelexp,
+ const char * level)
+{
+ char *dash;
+ size_t len, len_suffix;
+ size_t len_prefix;
+ char lowend[100], highend[100];
+ char mylevelexp[100];
+ int match_exact;
+
+ if(strlen(levelexp) >= 100 || strlen(levelexp) < 1) {
+ error(_("Illegal level expression %s"),levelexp);
+ /*NOTREACHED*/
+ }
+
+ if(levelexp[0] == '^') {
+ strncpy(mylevelexp, levelexp+1, strlen(levelexp)-1);
+ mylevelexp[strlen(levelexp)-1] = '\0';
+ }
+ else {
+ strncpy(mylevelexp, levelexp, strlen(levelexp));
+ mylevelexp[strlen(levelexp)] = '\0';
+ }
+
+ if(mylevelexp[strlen(mylevelexp)] == '$') {
+ match_exact = 1;
+ mylevelexp[strlen(mylevelexp)] = '\0';
+ }
+ else
+ match_exact = 0;
+
+ if((dash = strchr(mylevelexp,'-'))) {
+ if(match_exact == 1) {
+ error(_("Illegal level expression %s"),levelexp);
+ /*NOTREACHED*/
+ }
+ len = (size_t)(dash - mylevelexp);
+ len_suffix = strlen(dash) - 1;
+ len_prefix = len - len_suffix;
+
+ dash++;
+ strncpy(lowend, mylevelexp, len);
+ lowend[len] = '\0';
+ strncpy(highend, mylevelexp, len_prefix);
+ strncpy(&(highend[len_prefix]), dash, len_suffix);
+ highend[len] = '\0';
+ return ((strncmp(level, lowend, strlen(lowend)) >= 0) &&
+ (strncmp(level, highend , strlen(highend)) <= 0));
+ }
+ else {
+ if(match_exact == 1) {
+ return (strcmp(level, mylevelexp) == 0);
+ }
+ else {
+ return (strncmp(level, mylevelexp, strlen(mylevelexp)) == 0);
+ }
+ }