examen du code: recherche d’une balise inverse sur un char str terminé

src est une chaîne de caractères à terminaison non nulle dont la longueur est data_len . Je veux commencer à la fin de ce tableau et trouver la première occurrence de la html .
find_pos devrait conserver la position de la avec src

Le code ci-dessous vous semble-t-il correct?

 char *strrcasestr_len(const char *hay, size_t haylen, const char *ndl,size_t ndllen) { char *ret = NULL; int i; for (i = haylen - ndllen; i >= 0; i--) { if (!strncasecmp(&hay[i], ndl, ndllen)) { break; } } if (i == -1) return ret; else return (char *)&hay[i]; } 

Cela devrait le faire, très très vite.

 char const* find_body_closing_tag( char const* const src, size_t const data_len ) { static char table[256]; static bool inited; if (!inited) { table['<'] = 1; table['/'] = 2; table['b'] = table['B'] = 3; table['o'] = table['O'] = 4; table['d'] = table['D'] = 5; table['y'] = table['Y'] = 6; table['>'] = 7; inited = true; } for( char const* p = src + data_len - 7; p >= src; p -= 7 ) { if (char offset = table[*p]) { if (0 == strnicmp(p - (offset-1), "", 7)) return p - (offset-1); } } return 0; } 

Une autre approche très rapide consisterait à utiliser SIMD pour tester 16 caractères consécutifs contre '>' à la fois (et c’est ce que strrchr ou memrchr devrait faire).