Loading CHANGES +7 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,13 @@ Changelog Yang Tse (17 Oct 2009) - Bug report #2866724 indicated (http://curl.haxx.se/bug/view.cgi?id=2866724) that curl on Windows failed when writing files whose file names originally contained characters which are not valid for file names on Windows. Dan Fandrich provided an initial patch and another revised one to fix this issue. Daniel Stenberg (1 Oct 2009) - Tom Mueller correctly reported in bug report #2870221 (http://curl.haxx.se/bug/view.cgi?id=2870221) that libcurl returned an Loading RELEASE-NOTES +2 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ This release includes the following bugfixes: query part o don't shrink SO_SNDBUF on windows for those who have it set large already o connect next bug o invalid file name characters handling on Windows This release includes the following known bugs: Loading @@ -46,6 +47,6 @@ advice from friends like these: Karl Moerder, Kamil Dudka, Krister Johansen, Andre Guibert de Bruet, Michal Marek, Eric Wong, Guenter Knauf, Peter Sylvester, Daniel Johnson, Claes Jakobsson, Sven Anders, Chris Mumford, John P. McCaskey, Constantine Sapuntzakis, Michael Stillwell, Tom Mueller Constantine Sapuntzakis, Michael Stillwell, Tom Mueller, Dan Fandrich, Thanks! (and sorry if I forgot to mention someone) src/main.c +37 −22 Original line number Diff line number Diff line Loading @@ -158,13 +158,31 @@ static int vms_show = 0; #define O_BINARY 0 #endif #ifdef MSDOS #define USE_WATT32 #include <dos.h> #if defined(MSDOS) || defined(WIN32) static const char *msdosify(const char *); static char *rename_if_dos_device_name(char *); #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) (0) /* cannot tell if file is a device */ # endif #endif #ifdef WIN32 # define _use_lfn(f) (1) /* long file names always available */ #elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */ # define _use_lfn(f) (0) /* long file names never available */ #endif #endif /* MSDOS || WIN32 */ #ifdef MSDOS #define USE_WATT32 #include <dos.h> #ifdef DJGPP /* we want to glob our own argv[] */ char **__crt0_glob_function (char *arg) Loading Loading @@ -200,12 +218,6 @@ typedef enum { HTTPREQ_LAST } HttpReq; #ifdef WIN32 #include <direct.h> #define F_OK 0 #define mkdir(x,y) (mkdir)(x) #endif /* * Large file support (>2Gb) using WIN32 functions. */ Loading Loading @@ -244,6 +256,14 @@ typedef enum { # define LSEEK_ERROR (off_t)-1 #endif #ifdef WIN32 # include <direct.h> # define F_OK 0 # define mkdir(x,y) (mkdir)(x) # undef PATH_MAX # define PATH_MAX MAX_PATH #endif /* * Default sizeof(off_t) in case it hasn't been defined in config file. */ Loading Loading @@ -4350,9 +4370,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) free(url); break; } #if defined(MSDOS) #if defined(MSDOS) || defined(WIN32) { /* This is for DOS, and then we do some major replacing of /* For DOS and WIN32, we do some major replacing of bad characters in the file name before using it */ char file1[PATH_MAX]; if(strlen(outfile) >= PATH_MAX) Loading @@ -4366,7 +4386,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) break; } } #endif /* MSDOS */ #endif /* MSDOS || WIN32 */ } else if(urls) { /* fill '#1' ... '#9' terms from URL pattern */ Loading Loading @@ -5411,7 +5431,7 @@ static int create_dir_hierarchy(const char *outfile, FILE *errors) return result; /* 0 is fine, -1 is badness */ } #ifdef MSDOS #if defined(MSDOS) || defined(WIN32) #ifndef HAVE_BASENAME /* basename() returns a pointer to the last component of a pathname. Loading Loading @@ -5455,14 +5475,9 @@ msdosify (const char *file_name) const char * const dlimit = dos_name + sizeof(dos_name) - 1; const char *illegal_aliens = illegal_chars_dos; size_t len = sizeof (illegal_chars_dos) - 1; int lfn = 0; #ifdef DJGPP /* Support for Windows 9X VFAT systems, when available (djgpp only). */ if (_use_lfn (file_name)) lfn = 1; #endif if (lfn) { /* Support for Windows 9X VFAT systems, when available. */ if (_use_lfn (file_name)) { illegal_aliens = illegal_chars_w95; len -= (illegal_chars_w95 - illegal_chars_dos); } Loading Loading @@ -5541,7 +5556,7 @@ rename_if_dos_device_name (char *file_name) * retrieve such a file would fail at best and wedge us at worst. We need * to rename such files. */ char *base; struct stat st_buf; struct_stat st_buf; char fname[PATH_MAX]; strncpy(fname, file_name, PATH_MAX-1); Loading @@ -5562,4 +5577,4 @@ rename_if_dos_device_name (char *file_name) } return file_name; } #endif /* MSDOS */ #endif /* MSDOS || WIN32 */ Loading
CHANGES +7 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,13 @@ Changelog Yang Tse (17 Oct 2009) - Bug report #2866724 indicated (http://curl.haxx.se/bug/view.cgi?id=2866724) that curl on Windows failed when writing files whose file names originally contained characters which are not valid for file names on Windows. Dan Fandrich provided an initial patch and another revised one to fix this issue. Daniel Stenberg (1 Oct 2009) - Tom Mueller correctly reported in bug report #2870221 (http://curl.haxx.se/bug/view.cgi?id=2870221) that libcurl returned an Loading
RELEASE-NOTES +2 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ This release includes the following bugfixes: query part o don't shrink SO_SNDBUF on windows for those who have it set large already o connect next bug o invalid file name characters handling on Windows This release includes the following known bugs: Loading @@ -46,6 +47,6 @@ advice from friends like these: Karl Moerder, Kamil Dudka, Krister Johansen, Andre Guibert de Bruet, Michal Marek, Eric Wong, Guenter Knauf, Peter Sylvester, Daniel Johnson, Claes Jakobsson, Sven Anders, Chris Mumford, John P. McCaskey, Constantine Sapuntzakis, Michael Stillwell, Tom Mueller Constantine Sapuntzakis, Michael Stillwell, Tom Mueller, Dan Fandrich, Thanks! (and sorry if I forgot to mention someone)
src/main.c +37 −22 Original line number Diff line number Diff line Loading @@ -158,13 +158,31 @@ static int vms_show = 0; #define O_BINARY 0 #endif #ifdef MSDOS #define USE_WATT32 #include <dos.h> #if defined(MSDOS) || defined(WIN32) static const char *msdosify(const char *); static char *rename_if_dos_device_name(char *); #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) (0) /* cannot tell if file is a device */ # endif #endif #ifdef WIN32 # define _use_lfn(f) (1) /* long file names always available */ #elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */ # define _use_lfn(f) (0) /* long file names never available */ #endif #endif /* MSDOS || WIN32 */ #ifdef MSDOS #define USE_WATT32 #include <dos.h> #ifdef DJGPP /* we want to glob our own argv[] */ char **__crt0_glob_function (char *arg) Loading Loading @@ -200,12 +218,6 @@ typedef enum { HTTPREQ_LAST } HttpReq; #ifdef WIN32 #include <direct.h> #define F_OK 0 #define mkdir(x,y) (mkdir)(x) #endif /* * Large file support (>2Gb) using WIN32 functions. */ Loading Loading @@ -244,6 +256,14 @@ typedef enum { # define LSEEK_ERROR (off_t)-1 #endif #ifdef WIN32 # include <direct.h> # define F_OK 0 # define mkdir(x,y) (mkdir)(x) # undef PATH_MAX # define PATH_MAX MAX_PATH #endif /* * Default sizeof(off_t) in case it hasn't been defined in config file. */ Loading Loading @@ -4350,9 +4370,9 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) free(url); break; } #if defined(MSDOS) #if defined(MSDOS) || defined(WIN32) { /* This is for DOS, and then we do some major replacing of /* For DOS and WIN32, we do some major replacing of bad characters in the file name before using it */ char file1[PATH_MAX]; if(strlen(outfile) >= PATH_MAX) Loading @@ -4366,7 +4386,7 @@ operate(struct Configurable *config, int argc, argv_item_t argv[]) break; } } #endif /* MSDOS */ #endif /* MSDOS || WIN32 */ } else if(urls) { /* fill '#1' ... '#9' terms from URL pattern */ Loading Loading @@ -5411,7 +5431,7 @@ static int create_dir_hierarchy(const char *outfile, FILE *errors) return result; /* 0 is fine, -1 is badness */ } #ifdef MSDOS #if defined(MSDOS) || defined(WIN32) #ifndef HAVE_BASENAME /* basename() returns a pointer to the last component of a pathname. Loading Loading @@ -5455,14 +5475,9 @@ msdosify (const char *file_name) const char * const dlimit = dos_name + sizeof(dos_name) - 1; const char *illegal_aliens = illegal_chars_dos; size_t len = sizeof (illegal_chars_dos) - 1; int lfn = 0; #ifdef DJGPP /* Support for Windows 9X VFAT systems, when available (djgpp only). */ if (_use_lfn (file_name)) lfn = 1; #endif if (lfn) { /* Support for Windows 9X VFAT systems, when available. */ if (_use_lfn (file_name)) { illegal_aliens = illegal_chars_w95; len -= (illegal_chars_w95 - illegal_chars_dos); } Loading Loading @@ -5541,7 +5556,7 @@ rename_if_dos_device_name (char *file_name) * retrieve such a file would fail at best and wedge us at worst. We need * to rename such files. */ char *base; struct stat st_buf; struct_stat st_buf; char fname[PATH_MAX]; strncpy(fname, file_name, PATH_MAX-1); Loading @@ -5562,4 +5577,4 @@ rename_if_dos_device_name (char *file_name) } return file_name; } #endif /* MSDOS */ #endif /* MSDOS || WIN32 */