diff --git a/fdtextract.c b/fdtextract.c
index 9c975973f42effe1c921c06cbe8586d77724838c..fac6c277797827c3a7c2d3289e957f606298bb67 100644
--- a/fdtextract.c
+++ b/fdtextract.c
@@ -113,7 +113,7 @@ static ssize_t copy_data(int out_fd, int in_fd, ssize_t size)
 
 	while (left > 0) {
 		char buf[4096];
-		ssize_t count = sizeof(buf) < left ? sizeof(buf) : left;
+		ssize_t count = (ssize_t)sizeof(buf) < left ? (ssize_t)sizeof(buf) : left;
 		ssize_t written;
 
 		count = read(in_fd, buf, count);
@@ -277,14 +277,14 @@ char *read_header(int fd)
 		return NULL;
 
 	len = read(fd, buf, FDT_V1_SIZE);
-	if (len < FDT_V1_SIZE) {
+	if (len < (ssize_t)FDT_V1_SIZE) {
 		free(buf);
 		return NULL;
 	}
 
 	/* Read rest of header */
 	total_size = fdt_totalsize(buf);
-	if (total_size < FDT_V1_SIZE) {
+	if (total_size < (ssize_t)FDT_V1_SIZE) {
 		free(buf);
 		return NULL;
 	}
@@ -297,7 +297,7 @@ char *read_header(int fd)
 	buf = tmp;
 
 	len = read(fd, buf + FDT_V1_SIZE, total_size - FDT_V1_SIZE);
-	if (len < total_size - FDT_V1_SIZE) {
+	if (len < total_size - (ssize_t)FDT_V1_SIZE) {
 		free(buf);
 		return NULL;
 	}