dload.c : only call fwrite once
I assume the loop was never iterated more than once, because the write location was not updated at each loop iteration (buffer instead of buffer + nwritten), yet we never had reports of corrupted download. Signed-off-by: Xavier Chantry <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
68200676d2
commit
3cf0ee98c0
1 changed files with 6 additions and 8 deletions
|
@ -214,14 +214,12 @@ static int download_internal(const char *url, const char *localpath,
|
||||||
|
|
||||||
while((nread = fetchIO_read(dlf, buffer, PM_DLBUF_LEN)) > 0) {
|
while((nread = fetchIO_read(dlf, buffer, PM_DLBUF_LEN)) > 0) {
|
||||||
size_t nwritten = 0;
|
size_t nwritten = 0;
|
||||||
while(nwritten < nread) {
|
nwritten = fwrite(buffer, 1, nread, localf);
|
||||||
nwritten += fwrite(buffer, 1, (nread - nwritten), localf);
|
if((nwritten != nread) || ferror(localf)) {
|
||||||
if(ferror(localf)) {
|
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
|
||||||
_alpm_log(PM_LOG_ERROR, _("error writing to file '%s': %s\n"),
|
destfile, strerror(errno));
|
||||||
destfile, strerror(errno));
|
ret = -1;
|
||||||
ret = -1;
|
goto cleanup;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dl_thisfile += nread;
|
dl_thisfile += nread;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue