X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fkmp.h;h=fd37a6e30b30471cfa3202f58b0ea01dcf36d43d;hb=86919305a08aa88b3a60c3216752291ba7f0b496;hp=9577e8d34e80f6538e43b48442d9d28e56b39026;hpb=156797ecda5424df50b42d761b1811a3c965761f;p=libucw.git diff --git a/lib/kmp.h b/lib/kmp.h index 9577e8d3..fd37a6e3 100644 --- a/lib/kmp.h +++ b/lib/kmp.h @@ -161,7 +161,8 @@ kmp_search_internal(struct kmp *kmp, byte *str, uns len, struct list *nonzeroes, /* For every found string with id ID, it increments freq[ID]. * Also, it finds the longest among the leftmost matches. */ { - byte *str_end = str + len; + if (!len) + return NULL; kmp_state_t s = 0; kmp_char_t c = KMP_CONTROL_CHAR; struct kmp_transition tr, **prev; @@ -195,7 +196,7 @@ kmp_search_internal(struct kmp *kmp, byte *str, uns len, struct list *nonzeroes, } if (eof) break; - if (str >= str_end) + if (!--len) c = 0; else kmp_get_char((const byte **)&str, &c, kmp->modify_flags); @@ -210,9 +211,9 @@ kmp_search_internal(struct kmp *kmp, byte *str, uns len, struct list *nonzeroes, } static inline void -kmp_search(struct kmp *kmp, const byte *str, struct list *nonzeroes, struct kmp_result *freq) +kmp_search(struct kmp *kmp, const byte *str, uns len, struct list *nonzeroes, struct kmp_result *freq) { - kmp_search_internal(kmp, (byte*) str, strlen(str), nonzeroes, freq, NULL); + kmp_search_internal(kmp, (byte*) str, len, nonzeroes, freq, NULL); } static inline byte *