Hello and sorry for taking so long to reply.

On 2016-04-28 Martok wrote:
> xz when built for Windows with gcc on mingw32 or mingw-w64 does not
> preserve timestamps. I have found that this is because MinGW only
> provides utime() with filename as target, and this means that the
> file time is adjusted by io_copy_attrs() and then immediately reset
> to 'now' when the dest_fd is closed afterwards in io_close().
> 
> I have done a bit of digging and mingw actually has futime() (in
> <sys/utime.h>), but for some reason exports it only as _futime().
> Only utime() is wrapped with a non-underscore-version.
> 
> Using something like this in io_copy_attrs works just fine and would
> fix the issue...
>       (void)_futime(pair->dest_fd, &buf);

It's a bit surprising that it works because docs say that _utime() and
_futime() are identical except that _futime() takes a file descriptor.
But since it works, it's probably the best fix. I will fix it in the
next release. Thanks.

> Alternatively systems that need a file name could maybe first close
> the file and then set the file time, but that would complicate
> things...

It would complicate a little but it would be OK too if there were no
other way.

-- 
Lasse Collin  |  IRC: Larhzu @ IRCnet & Freenode

Reply via email to