Mail Archives: djgpp-workers/2001/08/13/10:13:50
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 <libc/stubs.h>
***************
*** 8,13 ****
--- 9,16 ----
#include <errno.h> /* For errno */
#include <go32.h>
#include <dpmi.h>
+ #include <dos.h>
+ #include <libc/dosio.h>
/* 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--
- Raw text -