From c3c1c24f5c177f58e68575ced3d63df46f6d33e5 Mon Sep 17 00:00:00 2001 From: abbotti Date: Tue, 9 Apr 2002 11:29:54 -0700 Subject: [PATCH] [svn] Fix for Borland's broken (on Win9X) `utime' function. Submitted by Ian Abbott in <3CB33A8E.15259.1E52AF@localhost>. (Based on original patch by Chin-yuan Kuo in <20020321015049.16722.qmail@web16202.mail.tpe.yahoo.com>.) --- ChangeLog | 5 +++++ src/ChangeLog | 7 +++++++ src/mswindows.c | 38 ++++++++++++++++++++++++++++++++++++++ windows/config.h.bor | 8 ++++++++ 4 files changed, 58 insertions(+) diff --git a/ChangeLog b/ChangeLog index f541d029..6c00d87d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-04-09 Ian Abbott + + * windows/config.h.bor: define `HACK_BCC_UTIME_BUG'. Define `utime' + as `borland_utime' if `HACK_BCC_UTIME_BUG' is defined. + 2002-03-26 Ian Abbott * windows/wget.dep: Updated several dependencies for object files. diff --git a/src/ChangeLog b/src/ChangeLog index cbaf8c44..f68fe964 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2002-04-09 Ian Abbott + + * mswindows.c (borland_utime): New function conditionally defined + when `HACK_BCC_UTIME_BUG' is defined. A reimplementation of + `utime()' as Borland's `utime()' function is broken on Windows 9x + systems. (Original patch by Chin-yuan Kuo .) + 2002-04-08 Hrvoje Niksic * ftp.c (ftp_loop): Propagate the result of ftp_retrieve_glob. diff --git a/src/mswindows.c b/src/mswindows.c index 95d89102..b907b72e 100644 --- a/src/mswindows.c +++ b/src/mswindows.c @@ -28,6 +28,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include #include +#ifdef HACK_BCC_UTIME_BUG +# include +# include +# ifdef HAVE_UTIME_H +# include +# endif +# ifdef HAVE_SYS_UTIME_H +# include +# endif +#endif + #include "wget.h" #include "utils.h" #include "url.h" @@ -242,3 +253,30 @@ ws_startup (void) atexit (ws_cleanup); SetConsoleCtrlHandler (ws_handler, TRUE); } + +/* Replacement utime function for buggy Borland C++Builder 5.5 compiler. + (The Borland utime function only works on Windows NT.) */ + +#ifdef HACK_BCC_UTIME_BUG +int borland_utime(const char *path, const struct utimbuf *times) +{ + int fd; + int res; + struct ftime ft; + struct tm *ptr_tm; + + if ((fd = open (path, O_RDWR)) < 0) + return -1; + + ptr_tm = localtime (×->modtime); + ft.ft_tsec = ptr_tm->tm_sec >> 1; + ft.ft_min = ptr_tm->tm_min; + ft.ft_hour = ptr_tm->tm_hour; + ft.ft_day = ptr_tm->tm_mday; + ft.ft_month = ptr_tm->tm_mon + 1; + ft.ft_year = ptr_tm->tm_year - 80; + res = setftime (fd, &ft); + close (fd); + return res; +} +#endif diff --git a/windows/config.h.bor b/windows/config.h.bor index 60a629e0..18ade4c8 100644 --- a/windows/config.h.bor +++ b/windows/config.h.bor @@ -23,6 +23,14 @@ #define ftruncate chsize #define inline __inline +/* Define if the free Borland C++Builder 5.5 command-line compiler is used, + because its utime() has a bug. */ +#define HACK_BCC_UTIME_BUG + +#ifdef HACK_BCC_UTIME_BUG +#define utime borland_utime +#endif + /* Define if you have the header file. */ #undef HAVE_ALLOCA_H