X-Authentication-Warning: new-smtp1.ihug.com.au: Host p273-tnt2.syd.ihug.com.au [203.173.131.19] claimed to be acceleron Message-ID: <022b01c12401$73724380$0a02a8c0@acceleron> From: "Andrew Cottrell" To: "Eli Zaretskii" Cc: , References: <007701c120c6$2d72db80$0a02a8c0 AT acceleron> <7458-Thu09Aug2001183844+0300-eliz AT is DOT elta DOT co DOT il> <00af01c12197$68628570$0a02a8c0 AT acceleron> <2561-Mon13Aug2001124204+0300-eliz AT is DOT elta DOT co DOT il> <018901c123f6$2b64fc50$0a02a8c0 AT acceleron> <9628-Mon13Aug2001162401+0300-eliz AT is DOT elta DOT co DOT il> Subject: Re: Windows 2000 patch for utime.c v1 Date: Tue, 14 Aug 2001 00:08:37 +1000 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0228_01C12455.44318280" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4807.1700 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700 Reply-To: djgpp-workers AT delorie DOT com This is a multi-part message in MIME format. ------=_NextPart_000_0228_01C12455.44318280 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit > > Overall looks like utime_2.dif is the correct patch to use as it allows > > directory times to be updated on Win2K. > > Please post this utime_2.dif patch again. I guess I got confused by > all those patches flying around ;-) utime_2.dif attached. ------=_NextPart_000_0228_01C12455.44318280 Content-Type: application/octet-stream; name="utime_v2.dif" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="utime_v2.dif" *** utimeold.c Sun Mar 11 00:10:04 2001 --- utime.c Thu Aug 9 21:18:06 2001 *************** *** 1,3 **** --- 1,4 ---- + /* Copyright (C) 2001 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ #include *************** *** 8,13 **** --- 9,16 ---- #include /* For errno */ #include #include + #include + #include /* An implementation of utime() for DJGPP. The utime() function specifies an access time and a modification time. DOS has only one *************** *** 24,33 **** unsigned int dostime, dosdate; int retval = 0, e = 0; - /* DOS wants the file open */ - fildes = open(path, O_RDONLY); - if (fildes == -1) return -1; - /* NULL times means use current time */ if (times == NULL) modtime = time((time_t *) 0); --- 27,32 ---- *************** *** 41,46 **** --- 40,81 ---- dostime = tm->tm_sec / 2 + (tm->tm_min << 5) + (tm->tm_hour << 11); + + if (_osmajor == 5 && + (_USE_LFN) && + (_get_dos_version(1) == 0x532)) /* LFN and NT (or 2000 or XP) */ + { + + _put_path(path); + r.x.ds = __tb_segment; /* DS:DX -> ASCIZ filename */ + r.x.dx = __tb_offset; + + r.x.cx = dostime; /* New time */ + r.x.di = dosdate; /* New date */ + r.x.si = 0x00; /* Set to zero just in case */ + + r.x.ax = 0x7143; /* LFN API for extended get and set time */ + r.x.bx = 0x03; /* Set last write date / time */ + __dpmi_int(0x21, &r); + + if (!(r.x.flags & 1)) /* Pass then continue */ + { + /* Uses date allready in r.x.di */ + r.x.ax = 0x7143; /* LFN API for extended get and set time */ + r.x.bx = 0x05; /* Set last access date / time */ + __dpmi_int(0x21, &r); + if (!(r.x.flags & 1)) /* Pass then continue */ + { + return 0; + } + } + } + + /* DOS wants the file open */ + fildes = open(path, O_RDONLY); + if (fildes == -1) return -1; + + /* Set the file timestamp */ r.h.ah = 0x57; /* DOS FileTimes call */ r.h.al = 0x01; /* Set date/time request */ ------=_NextPart_000_0228_01C12455.44318280--