aboutsummaryrefslogtreecommitdiff
path: root/usr.bin/fetch
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2012-01-18 15:13:21 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2012-01-18 15:13:21 +0000
commit2a7daafe67dbd6a91ab557b56b2ca12ca87a6022 (patch)
treea2005365ba56694fd925cd9d8f2687ea003a376f /usr.bin/fetch
parentffce9a999dda9489933a511d264f71cd9e7e78b6 (diff)
Notes
Diffstat (limited to 'usr.bin/fetch')
-rw-r--r--usr.bin/fetch/fetch.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/usr.bin/fetch/fetch.c b/usr.bin/fetch/fetch.c
index 8d2667196935..e8b7318a7ffe 100644
--- a/usr.bin/fetch/fetch.c
+++ b/usr.bin/fetch/fetch.c
@@ -317,7 +317,7 @@ fetch(char *URL, const char *path)
struct stat sb, nsb;
struct xferstat xs;
FILE *f, *of;
- size_t size, wr;
+ size_t size, readcnt, wr;
off_t count;
char flags[8];
const char *slash;
@@ -636,21 +636,26 @@ fetch(char *URL, const char *path)
stat_end(&xs);
siginfo = 0;
}
- if ((size = fread(buf, 1, size, f)) == 0) {
+
+ if (size == 0)
+ break;
+
+ if ((readcnt = fread(buf, 1, size, f)) < size) {
if (ferror(f) && errno == EINTR && !sigint)
clearerr(f);
- else
+ else if (readcnt == 0)
break;
}
- stat_update(&xs, count += size);
- for (ptr = buf; size > 0; ptr += wr, size -= wr)
- if ((wr = fwrite(ptr, 1, size, of)) < size) {
+
+ stat_update(&xs, count += readcnt);
+ for (ptr = buf; readcnt > 0; ptr += wr, readcnt -= wr)
+ if ((wr = fwrite(ptr, 1, readcnt, of)) < readcnt) {
if (ferror(of) && errno == EINTR && !sigint)
clearerr(of);
else
break;
}
- if (size != 0)
+ if (readcnt != 0)
break;
}
if (!sigalrm)