add: } else {  str bakservice, baknaptr;  int naptrlen, len;           if (strncasecmp(naptr->services, "e2u+", 4) != 0) { return 0; } baknaptr.s   = naptr->services + 4;  baknaptr.len = naptr->services_len - 4; for (;;) {  bakservice.s   = service->s + 1;  bakservice.len = service->len - 1; naptrlen = findchr(baknaptr.s,'+',baknaptr.len);  for (;;) {  len = findchr(bakservice.s,'+',bakservice.len); if ((naptrlen == len ) && !strncasecmp(baknaptr.s, bakservice.s, len)){ return 1; } if ( (bakservice.len -= len+1) > 0) { bakservice.s += len+1; continue; } break; } if ( (baknaptr.len -= naptrlen+1) > 0) { baknaptr.s += naptrlen+1; continue; } break; }  return 0;
context: static inline int sip_match( struct naptr_rdata* naptr, str* service){  if (service->len == 0) {    return (naptr->flags_len == 1) &&      ((naptr->flags[0] == 'u') || (naptr->flags[0] == 'U')) &&      (naptr->services_len == 7) &&      ((strncasecmp(naptr->services, "e2u+sip", 7) == 0) ||       (strncasecmp(naptr->services, "sip+e2u", 7) == 0));  } else {    return (naptr->flags_len == 1) &&      ((naptr->flags[0] == 'u') || (naptr->flags[0] == 'U')) &&      (naptr->services_len == service->len + 8) &&      (strncasecmp(naptr->services, "e2u+", 4) == 0) &&      (strncasecmp(naptr->services + 4, service->s, service->len) == 0) &&      (strncasecmp(naptr->services + 4 + service->len, ":sip", 4) == 0);  }}