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;
}
/*