diff options
Diffstat (limited to 'lib-src')
-rw-r--r-- | lib-src/make-fingerprint.c | 32 |
1 files changed, 14 insertions, 18 deletions
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,29 +140,25 @@ main (int argc, char **argv) } else { - char *finger = memmem (buf, chunksz, fingerprint, sizeof fingerprint); - if (!finger) - { - 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; - } + bool fingered = false; - if (fseeko (f, finger - buf, SEEK_SET) != 0) + for (char *finger = buf; + (finger = memmem (finger, buf + chunksz - finger, + fingerprint, sizeof fingerprint)); + finger++) { - perror (file); - return EXIT_FAILURE; + if (! (fseeko (f, finger - buf, SEEK_SET) == 0 + && fwrite (digest, 1, sizeof digest, f) == sizeof digest)) + { + perror (file); + return EXIT_FAILURE; + } + fingered = true; } - if (fwrite (digest, 1, sizeof digest, f) != sizeof digest) + if (!fingered) { - perror (file); + fprintf (stderr, "%s: %s: missing fingerprint\n", prog, file); return EXIT_FAILURE; } } |