Followup to r225599: the fseek() was a no-op since the file was opened

in append mode.  Open it in read-write mode instead.  Also move the
fseek up one level to cover the (unlikely but not impossible) case where
the server accepts ranges but does not send a Content-Size header.

PR:		bin/117277
MFC after:	3 weeks
This commit is contained in:
des 2011-09-27 15:57:13 +00:00
parent 42f9fc1b3f
commit 0a0c98d376

View File

@ -540,7 +540,7 @@ fetch(char *URL, const char *path)
goto failure;
}
/* we got it, open local file */
if ((of = fopen(path, "a")) == NULL) {
if ((of = fopen(path, "r+")) == NULL) {
warn("%s: fopen()", path);
goto failure;
}
@ -559,13 +559,13 @@ fetch(char *URL, const char *path)
sb = nsb;
/* picked up again later */
}
/* seek to where we left off */
if (of != NULL && fseek(of, url->offset, SEEK_SET) != 0) {
warn("%s: fseek()", path);
fclose(of);
of = NULL;
/* picked up again later */
}
}
/* seek to where we left off */
if (of != NULL && fseek(of, url->offset, SEEK_SET) != 0) {
warn("%s: fseek()", path);
fclose(of);
of = NULL;
/* picked up again later */
}
} else if (m_flag && sb.st_size != -1) {
/* mirror mode, local file exists */