summaryrefslogtreecommitdiff
path: root/lib-src/make-fingerprint.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib-src/make-fingerprint.c')
-rw-r--r--lib-src/make-fingerprint.c32
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;
}
}