aboutsummaryrefslogtreecommitdiffstats
path: root/lib-src
diff options
context:
space:
mode:
Diffstat (limited to 'lib-src')
-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)
140 } 140 }
141 else 141 else
142 { 142 {
143 char *finger = memmem (buf, chunksz, fingerprint, sizeof fingerprint); 143 bool fingered = false;
144 if (!finger)
145 {
146 fprintf (stderr, "%s: %s: missing fingerprint\n", prog, file);
147 return EXIT_FAILURE;
148 }
149 else if (memmem (finger + 1, buf + chunksz - (finger + 1),
150 fingerprint, sizeof fingerprint))
151 {
152 fprintf (stderr, "%s: %s: two occurrences of fingerprint\n",
153 prog, file);
154 return EXIT_FAILURE;
155 }
156 144
157 if (fseeko (f, finger - buf, SEEK_SET) != 0) 145 for (char *finger = buf;
146 (finger = memmem (finger, buf + chunksz - finger,
147 fingerprint, sizeof fingerprint));
148 finger++)
158 { 149 {
159 perror (file); 150 if (! (fseeko (f, finger - buf, SEEK_SET) == 0
160 return EXIT_FAILURE; 151 && fwrite (digest, 1, sizeof digest, f) == sizeof digest))
152 {
153 perror (file);
154 return EXIT_FAILURE;
155 }
156 fingered = true;
161 } 157 }
162 158
163 if (fwrite (digest, 1, sizeof digest, f) != sizeof digest) 159 if (!fingered)
164 { 160 {
165 perror (file); 161 fprintf (stderr, "%s: %s: missing fingerprint\n", prog, file);
166 return EXIT_FAILURE; 162 return EXIT_FAILURE;
167 } 163 }
168 } 164 }