abort();
throw std::runtime_error("Internal error: " __FILE__);
  t_pmatch(const char *string, const char *pattern, const char **estr)  {      char    stringc, patternc;      int     match, negate_range;      char    rangec;      const char *oestr, *pestr;      for (;; ++string) {          stringc = *string;          /*           * apollo compiler bug: switch (patternc = *pattern++) dies           */          patternc = *pattern++;          switch (patternc) {          case 0:              *estr = string;              return (stringc == 0 ? 2 : 1);          case '?':              if (stringc == 0)                  return (0);              *estr = string;              break;          case '*':              if (!*pattern) {                  while (*string) string++;                  *estr = string;                  return (2);              }              oestr = *estr;              pestr = 0;              do {                  switch(t_pmatch(string, pattern, estr)) {                  case 0:                      break;                  case 1:                      pestr = *estr;                      break;                  case 2:                      return 2;                  default:                      abort();    /* Cannot happen */                  }                  *estr = string;              }              while (*string++);              if (pestr) {                  *estr = pestr;                  return 1;              }              else {                  *estr = oestr;                  return 0;              }          case '[':              match = 0;              if ((negate_range = (*pattern == '^')) != 0)                  pattern++;              while ((rangec = *pattern++) != '\0') {                  if (rangec == ']')                      break;                  if (match)                      continue;                  if (rangec == '-'                      && *(pattern-2) != '[' && *pattern  != ']') {                      match = (globcharcoll(stringc, *pattern) <= 0 &&                      globcharcoll(*(pattern-2), stringc) <= 0);                      pattern++;                  }                  else                      match = (stringc == rangec);              }              if (rangec == 0)                  return (-1);              if (match == negate_range)                  return (0);              *estr = string;              break;          default:              if (patternc != stringc)                  return (0);              *estr = string;              break;          }      }  }