]> granicus.if.org Git - curl/commitdiff
(http://curl.haxx.se/mail/archive-2007-12/0039.html) reported and fixed
authorYang Tse <yangsita@gmail.com>
Tue, 18 Dec 2007 18:33:24 +0000 (18:33 +0000)
committerYang Tse <yangsita@gmail.com>
Tue, 18 Dec 2007 18:33:24 +0000 (18:33 +0000)
a file truncation problem on Windows build targets triggered when retrying
a download with curl.

CHANGES
RELEASE-NOTES
src/main.c

diff --git a/CHANGES b/CHANGES
index 62cc18a27ce40dcb3d9615f641561a2d26b43a64..340a4b1f52e72f6fc6b3c70c31cfbdddc488f292 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -13,6 +13,10 @@ Yang Tse (18 Dec 2007)
   if no build target has been defined we will target WinXP when building
   curl/libcurl with MSVC 9.0 (VS2008).
 
+- (http://curl.haxx.se/mail/archive-2007-12/0039.html) reported and fixed
+  a file truncation problem on Windows build targets triggered when retrying
+  a download with curl.
+
 Daniel S (17 Dec 2007)
 - Mateusz Loskot pointed out that MSVC 9.0 (VS2008) has the pollfd struct and
   defines in winsock2.h somehow differently than previous versions and that
index fb09eba00ac1f64895a054c53aa6d431fbf4caaf..12b690469112cc451c8d32f53c33e669d4f0be70 100644 (file)
@@ -37,6 +37,7 @@ This release includes the following bugfixes:
  o POST with callback over proxy requiring NTLM or Digest
  o Expect: 100-continue flaw on re-used connection with POSTs
  o build fix for MSVC 9.0 (VS2008)
+ o Windows curl builds failed file truncation when retry downloading
 
 This release includes the following known bugs:
 
index 91b6d9fb2885b3925f0861369f4d628e20f35910..b7a02b3ab405246abde5ee12c20837d51190065b 100644 (file)
@@ -323,21 +323,19 @@ char convert_char(curl_infotype infotype, char this_char)
 #define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
 #endif
 
+#ifndef HAVE_FTRUNCATE
+#define HAVE_FTRUNCATE 1
+#endif
+
 static int ftruncate64 (int fd, curl_off_t where)
 {
-  curl_off_t curr;
-  int rc = 0;
-
-  if ((curr = _lseeki64(fd, 0, SEEK_CUR)) < 0)
-     return -1;
+  if(_lseeki64(fd, where, SEEK_SET) < 0)
+    return -1;
 
-  if (_lseeki64(fd, where, SEEK_SET) < 0)
-     return -1;
+  if(!SetEndOfFile((HANDLE)_get_osfhandle(fd)))
+    return -1;
 
-  if (write(fd, 0, 0) < 0)
-     rc = -1;
-  _lseeki64(fd, curr, SEEK_SET);
-  return rc;
+  return 0;
 }
 #define ftruncate(fd,where) ftruncate64(fd,where)
 #endif