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) | |||
| 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 | } |