diff --git a/lib-src/make-fingerprint.c b/lib-src/make-fingerprint.c index 79bd007a5f9..5779e0d2746 100644 --- a/lib-src/make-fingerprint.c +++ b/lib-src/make-fingerprint.c @@ -140,31 +140,27 @@ main (int argc, char **argv) } else { - char *finger = memmem (buf, chunksz, fingerprint, sizeof fingerprint); - if (!finger) + bool fingered = false; + + for (char *finger = buf; + (finger = memmem (finger, buf + chunksz - finger, + fingerprint, sizeof fingerprint)); + finger++) + { + if (! (fseeko (f, finger - buf, SEEK_SET) == 0 + && fwrite (digest, 1, sizeof digest, f) == sizeof digest)) + { + perror (file); + return EXIT_FAILURE; + } + fingered = true; + } + + if (!fingered) { fprintf (stderr, "%s: %s: missing fingerprint\n", prog, file); return EXIT_FAILURE; } - else if (memmem (finger + 1, buf + chunksz - (finger + 1), - fingerprint, sizeof fingerprint)) - { - fprintf (stderr, "%s: %s: two occurrences of fingerprint\n", - prog, file); - return EXIT_FAILURE; - } - - if (fseeko (f, finger - buf, SEEK_SET) != 0) - { - perror (file); - return EXIT_FAILURE; - } - - if (fwrite (digest, 1, sizeof digest, f) != sizeof digest) - { - perror (file); - return EXIT_FAILURE; - } } if (fclose (f) != 0)