]> mj.ucw.cz Git - libucw.git/blobdiff - lib/kmp.h
Try to merge recent changes in v3.9 to image branch...
[libucw.git] / lib / kmp.h
index 9577e8d34e80f6538e43b48442d9d28e56b39026..fd37a6e30b30471cfa3202f58b0ea01dcf36d43d 100644 (file)
--- 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.  */
 {
   /* 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;
        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 (eof)
                        break;
-               if (str >= str_end)
+               if (!--len)
                        c = 0;
                else
                        kmp_get_char((const byte **)&str, &c, kmp->modify_flags);
                        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
 }
 
 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 *
 }
 
 static inline byte *