Module Name:    src
Committed By:   riastradh
Date:           Tue Mar 21 13:56:38 UTC 2017

Modified Files:
        src/usr.bin/vndcompress: utils.c

Log Message:
Simplify.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/usr.bin/vndcompress/utils.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/vndcompress/utils.c
diff -u src/usr.bin/vndcompress/utils.c:1.5 src/usr.bin/vndcompress/utils.c:1.6
--- src/usr.bin/vndcompress/utils.c:1.5	Thu Apr  7 23:29:59 2016
+++ src/usr.bin/vndcompress/utils.c	Tue Mar 21 13:56:38 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: utils.c,v 1.5 2016/04/07 23:29:59 riastradh Exp $	*/
+/*	$NetBSD: utils.c,v 1.6 2017/03/21 13:56:38 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: utils.c,v 1.5 2016/04/07 23:29:59 riastradh Exp $");
+__RCSID("$NetBSD: utils.c,v 1.6 2017/03/21 13:56:38 riastradh Exp $");
 
 #include <sys/types.h>
 
@@ -59,31 +59,23 @@ int	vsnprintf_ss(char *restrict, size_t,
  * Read, returning partial data only at end of file.
  */
 ssize_t
-read_block(int fd, void *buffer, size_t n)
+read_block(int fd, void *buf, size_t len)
 {
-	char *p = buffer, *const end __diagused = (p + n);
-	size_t total_read = 0;
+	char *p = buf;
+	size_t n = len;
+	const char *const end __diagused = p + n;
+	ssize_t nread = 0;
 
-	while (n > 0) {
-		const ssize_t n_read = read(fd, p, n);
-		if (n_read == -1)
+	while (0 < n && (nread = read(fd, p, n)) != 0) {
+		if (nread == -1)
 			return -1;
-		assert(n_read >= 0);
-		if (n_read == 0)
-			break;
-
-		assert((size_t)n_read <= n);
-		n -= (size_t)n_read;
-
-		assert(p <= end);
-		assert(n_read <= (end - p));
-		p += (size_t)n_read;
-
-		assert((size_t)n_read <= (SIZE_MAX - total_read));
-		total_read += (size_t)n_read;
+		p += MIN(n, (size_t)nread);
+		n -= MIN(n, (size_t)nread);
+		assert(p + n == end);
 	}
 
-	return total_read;
+	assert(n == 0 || nread == 0); /* complete read or EOF */
+	return len - n;
 }
 
 /*
@@ -91,35 +83,29 @@ read_block(int fd, void *buffer, size_t 
  * of file.
  */
 ssize_t
-pread_block(int fd, void *buffer, size_t n, off_t fdpos)
+pread_block(int fd, void *buf, size_t len, off_t fdpos)
 {
-	char *p = buffer, *const end __diagused = (p + n);
-	size_t total_read = 0;
+	char *p = buf;
+	size_t n = len;
+	const char *const end __diagused = p + n;
+	ssize_t nread = 0;
 
 	assert(0 <= fdpos);
-	assert(n <= (OFF_MAX - (uintmax_t)fdpos));
+	assert(n <= OFF_MAX - (uintmax_t)fdpos);
+	const off_t endpos __diagused = fdpos + n;
 
-	while (n > 0) {
-		assert(total_read <= n);
-		const ssize_t n_read = pread(fd, p, n, (fdpos + total_read));
-		if (n_read == -1)
+	while (0 < n && (nread = pread(fd, p, n, fdpos)) != 0) {
+		if (nread == -1)
 			return -1;
-		assert(n_read >= 0);
-		if (n_read == 0)
-			break;
-
-		assert((size_t)n_read <= n);
-		n -= (size_t)n_read;
-
-		assert(p <= end);
-		assert(n_read <= (end - p));
-		p += (size_t)n_read;
-
-		assert((size_t)n_read <= (SIZE_MAX - total_read));
-		total_read += (size_t)n_read;
+		fdpos += MIN(n, (size_t)nread);
+		p += MIN(n, (size_t)nread);
+		n -= MIN(n, (size_t)nread);
+		assert(p + n == end);
+		assert(fdpos + (off_t)n == endpos);
 	}
 
-	return total_read;
+	assert(n == 0 || nread == 0); /* complete read or EOF */
+	return len - n;
 }
 
 /*

Reply via email to