summaryrefslogtreecommitdiffstats
path: root/src/md5util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/md5util.c')
-rw-r--r--src/md5util.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/md5util.c b/src/md5util.c
index 41a5a31..a49e5d5 100644
--- a/src/md5util.c
+++ b/src/md5util.c
@@ -21,6 +21,8 @@
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
#include "md5util.h"
#include "md5.h"
@@ -49,7 +51,7 @@ int fdmd5(int fd, size_t l, char *md) {
m = l < MMAPSIZE ? l : MMAPSIZE;
- while (l > 0 && (d = mmap(NULL, m, PROT_READ, MAP_SHARED, fd, o))) {
+ while (l > 0 && ((d = mmap(NULL, m, PROT_READ, MAP_SHARED, fd, o)) != MAP_FAILED)) {
md5_append(&s, d, m);
munmap(d, m);
@@ -61,7 +63,7 @@ int fdmd5(int fd, size_t l, char *md) {
if (l > 0) {
void *p;
- fprintf(stderr, "mmap() failed\n");
+ fprintf(stderr, "mmap() failed: %s\n", strerror(errno));
if (!(p = malloc(BUFSIZE)))
r = -1;
@@ -70,7 +72,13 @@ int fdmd5(int fd, size_t l, char *md) {
for (;;) {
ssize_t r;
- if ((r = read(fd, p, BUFSIZE)) <= 0)
+ if ((r = read(fd, p, BUFSIZE)) < 0) {
+ fprintf(stderr, "read(): %s\n", strerror(errno));
+ free(p);
+ return -1;
+ }
+
+ if (!r)
break;
md5_append(&s, p, r);