From: Keith M. <no...@so...> - 2018-02-23 22:40:16
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Repository: mingw-org-wsl". The branch, 5.1-trunk has been updated via 2d24930930ca530a8b9e6b4fb892cf15562fce4a (commit) via b0a6e63e896cf28447d2312375976bf111cbc100 (commit) from 5abede16dd604548bd822293335c58f0bf91fb1e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://sf.net/p/mingw/mingw-org-wsl/ci/2d24930930ca530a8b9e6b4fb892cf15562fce4a/ commit 2d24930930ca530a8b9e6b4fb892cf15562fce4a Author: Keith Marshall <ke...@us...> Date: Fri Feb 23 19:51:52 2018 +0000 Correct <sys/timeb.h> 32-bit vs. 64-bit time_t anomalies. diff --git a/mingwrt/ChangeLog b/mingwrt/ChangeLog index ab5367c..a4a2777 100644 --- a/mingwrt/ChangeLog +++ b/mingwrt/ChangeLog @@ -1,5 +1,33 @@ 2018-02-22 Keith Marshall <ke...@us...> + Correct <sys/timeb.h> 32-bit vs. 64-bit time_t anomalies. + + * include/sys/timeb.h: Assert copyright; tidy layout. + (_TIMEB_H_): Original multiple inclusion guard macro; rename it... + (_SYS_TIMEB_H): ...conforming to this preferred naming convention. + (GCC system_header): Add pragma, asserting it as such a header. + (__need_time_t): Define for selective <sys/types.h> inclusion. + (_BEGIN_C_DECLS, _END_C_DECLS): Use them as appropriate. + (pragma pack): Push to pack all structs with 2-byte alignment. + (struct timeb): Mark as deprecated, from POSIX.1-2001 onwards. + (ftime): Likewise, mark as deprecated; always emulate it by in-line + redirection to _ftime(), however this may be implemented. + (struct __timeb32): Make its definition unconditionally visible. + (_ftime32) [__MSVCRT_VERSION__ >= __MSVCR80_DLL]: Declare prototype. + (_ftime32) [_WIN64 || _WIN32_WINNT >= _WIN32_WINNT_VISTA]: Likewise, + otherwise emulate it by in-line redirection to 32-bit _ftime(). + (struct __timeb64, _ftime64): Make visibility condition symbolic... + [__MSVCRT_VERSION__ >= __MSVCR61_DLL]: ...thus; add visibility for... + [_WIN64 || _WIN32_WINNT >= _WIN32_WINNT_WIN2K]: ...these alternatives. + (_ftime) [__MSVCRT_VERSION__ < __MSVCR80_DLL]: Declare prototype. + (_ftime) [__MSVCRT_VERSION__ >= __MSVCR80_DLL]: Emulate it... + [_USE_32BIT_TIME_T]: ...by in-line redirection to _ftime32(), else... + [!_USE_32BIT_TIME_T]: ...to _ftime64(). + + * tests/headers.at [sys/timeb.h]: Suppress "deprecated" warnings. + +2018-02-22 Keith Marshall <ke...@us...> + Correct Windows version support for <utime.h> functions. * include/sys/utime.h: Tidy layout; assert copyright. diff --git a/mingwrt/include/sys/timeb.h b/mingwrt/include/sys/timeb.h index 5287e49..36ac9d5 100644 --- a/mingwrt/include/sys/timeb.h +++ b/mingwrt/include/sys/timeb.h @@ -1,97 +1,175 @@ /* - * timeb.h - * This file has no copyright assigned and is placed in the Public Domain. - * This file is a part of the mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER within the package. + * sys/timeb.h * - * Support for the UNIX System V ftime system call. + * Support for the UNIX System V ftime() system call, and its various + * Microsoft counterparts. + * + * + * $Id$ + * + * Written by Colin Peters <co...@bi...> + * Copyright (C) 1997-2001, 2003, 2004, 2007, 2018, MinGW.org Project + * + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * */ +#ifndef _SYS_TIMEB_H +#pragma GCC system_header +#define _SYS_TIMEB_H -#ifndef _TIMEB_H_ -#define _TIMEB_H_ - -/* All the headers include this file. */ #include <_mingw.h> +#define __need_time_t 1 #include <sys/types.h> +#undef __need_time_t -#ifndef RC_INVOKED +#ifndef RC_INVOKED -/* - * TODO: Structure not tested. +/* Tests conducted on 32-bit Win7 indicate that all timeb structs, + * on Win32 hosts, are packed with 2-byte alignment. + * + * FIXME: Is this also true for Win64 hosts? + */ +#pragma pack( push, 2 ) + +#ifndef _NO_OLDNAMES +/* This is the standard POSIX/Unix System V API declaration; this + * API was declared as deprecated in POSIX.1-2001, and subsequently + * deleted from POSIX.1-2008 onwards. + */ +struct __POSIX_2001_DEPRECATED timeb +{ time_t time; + short millitm; + short timezone; + short dstflag; +}; +#endif +/* Microsoft's equivalent of the above uses their typically ugly + * underscore decorated name; in common with the POSIX variant, it + * is susceptible to bugs resulting from time_t ambiguity, which + * is endemic within non-free MSVCR80.DLL and later. */ struct _timeb -{ - time_t time; - short millitm; - short timezone; - short dstflag; +{ time_t time; + short millitm; + short timezone; + short dstflag; }; -#if __MSVCRT_VERSION__ >= 0x0800 -/* - * TODO: Structure not tested. +/* To avoid time_t ambiguity, the following is equivalent to struct + * _timeb, with explicitly 32-bit time_t; strictly, Microsoft didn't + * support this, on 32-bit Windows, until non-free MSVCR80.DLL, or + * universally from Win-Vista onwards; we make it unconditionally + * available, and back-port its associated _ftime32() function + * for use on legacy Win32 hosts. */ struct __timeb32 -{ - __time32_t time; - short millitm; - short timezone; - short dstflag; +{ __time32_t time; + short millitm; + short timezone; + short dstflag; }; -#endif /* __MSVCRT_VERSION__ >= 0x0800 */ -#ifndef _NO_OLDNAMES -/* - * TODO: Structure not tested. +#pragma pack( pop ) + +_BEGIN_C_DECLS + +#if defined _WIN64 /* Always supported on Win64; otherwise... */ \ + || __MSVCRT_VERSION__ >= __MSVCR61_DLL || _WIN32_WINNT >= _WIN32_WINNT_WIN2K +/* The _ftime64() function, and its associated struct __timeb64 data type, were + * first introduced in the non-free MSVCR61.DLL runtime, and subsequently, they + * were retrofitted to MSVCRT.DLL from Win2K onwards. */ -struct timeb -{ - time_t time; - short millitm; - short timezone; - short dstflag; +#pragma pack( push, 2 ) + +struct __timeb64 +{ __time64_t time; + short millitm; + short timezone; + short dstflag; }; -#endif -#ifdef __cplusplus -extern "C" { -#endif +#pragma pack( pop ) -/* TODO: Not tested. */ -_CRTIMP void __cdecl __MINGW_NOTHROW _ftime (struct _timeb*); +_CRTIMP __cdecl __MINGW_NOTHROW void _ftime64 (struct __timeb64 *); -#ifndef _NO_OLDNAMES -/* FIXME for __MSVCRT_VERSION__ >= 0x0800 */ -_CRTIMP void __cdecl __MINGW_NOTHROW ftime (struct timeb*); -#endif /* Not _NO_OLDNAMES */ +#endif /* _WIN64 || __MSVCR61_DLL || _WIN32_WINNT_WIN2K and later */ -/* This requires newer versions of msvcrt.dll (6.10 or higher). */ -#if __MSVCRT_VERSION__ >= 0x0601 -struct __timeb64 -{ - __time64_t time; - short millitm; - short timezone; - short dstflag; -}; +#if __MSVCRT_VERSION__ < __MSVCR80_DLL +/* Non-free MSVCR80.DLL, and later, don't povide _ftime() directly; + * (it must be emulated); when NOT using any of these non-free DLLs, + * we may import it from MSVCRT.DLL + */ +_CRTIMP __cdecl __MINGW_NOTHROW void _ftime (struct _timeb *); +#endif /* !__MSVCR80_DLL or later */ + +#if defined _WIN64 /* Also always supported on Win64, but... */ \ + || __MSVCRT_VERSION__ >= __MSVCR80_DLL || _WIN32_WINNT >= _WIN32_WINNT_VISTA +/* Conversely, the complementary _ftime32() function, and its associated struct + * __timeb32 data type, were not introduced until non-free MSVCR80.DLL runtime, + * nor retrofitted to MSVCRT.DLL until Win-Vista onwards. + */ +_CRTIMP __cdecl __MINGW_NOTHROW void _ftime32 (struct __timeb32 *); -_CRTIMP void __cdecl __MINGW_NOTHROW _ftime64 (struct __timeb64*); -#endif /* __MSVCRT_VERSION__ >= 0x0601 */ +#else /* !(_WIN64 || __MSVCR80_DLL || _WIN32_WINNT_VISTA and later) */ +/* This is a legacy _WIN32 system, pre-Win-Vista, and NOT using MSVCR80.DLL, + * or later; it is convenient for us to emulate _ftime32(), by the expedient + * of mapping it to the legacy 32-bit _ftime() implementation. + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +void _ftime32 (struct __timeb32 *__t) {_ftime ((struct _timeb *)(__t));} -#if __MSVCRT_VERSION__ >= 0x0800 -_CRTIMP void __cdecl __MINGW_NOTHROW _ftime32 (struct __timeb32*); -#ifndef _USE_32BIT_TIME_T -_CRTALIAS void __cdecl __MINGW_NOTHROW _ftime (struct _timeb* _v) { return(_ftime64 ((struct __timeb64*)_v)); } -#else -_CRTALIAS void __cdecl __MINGW_NOTHROW _ftime (struct _timeb* _v) { return(_ftime32 ((struct __timeb32*)_v)); } -#endif -#endif /* __MSVCRT_VERSION__ >= 0x0800 */ +#endif /* !(_WIN64 || __MSVCR80_DLL || _WIN32_WINNT_VISTA and later) */ -#ifdef __cplusplus -} -#endif +#if __MSVCRT_VERSION__ >= __MSVCR80_DLL +/* When linking with any non-free runtime, from MSVCR80.DLL onwards, + * we must emulate _ftime(), by redirection to either _ftime32(), or + * _ftime64(), depending on (error prone) user feature selection... + */ +# ifdef _USE_32BIT_TIME_T + /* ...of an API with an explicitly 32-bit time_t... + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +void _ftime (struct _timeb * __t) {_ftime32 ((struct __timeb32*)__t);} + +# else + /* ...or the Microsoft default, (incompatible with 32-bit MSVCRT.DLL, + * and not consistently implemented within all 32-bit WinAPI modules), + * 64-bit time_t + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +void _ftime (struct _timeb * __t) {_ftime64 ((struct __timeb64*)__t);} + +# endif /* !_USE_32BIT_TIME_T */ +#endif /* __MSVCR80_DLL and later */ + +#ifndef _NO_OLDNAMES +/* Regardless of how the _ftime() function may be implemented, we provide + * the deprecated POSIX.1 equivalent API, by in-line mapping of the ftime() + * function to that _ftime() implementation. + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW __POSIX_2001_DEPRECATED +void ftime (struct timeb *__t) {_ftime ((struct _timeb *)(__t)); } +#endif /* !_NO_OLDNAMES */ -#endif /* Not RC_INVOKED */ +_END_C_DECLS -#endif /* Not _TIMEB_H_ */ +#endif /* ! RC_INVOKED */ +#endif /* !_SYS_TIMEB_H: $RCSfile$: end of file */ diff --git a/mingwrt/tests/headers.at b/mingwrt/tests/headers.at index 08e2b53..884a456 100644 --- a/mingwrt/tests/headers.at +++ b/mingwrt/tests/headers.at @@ -115,6 +115,7 @@ m4_foreach_w([HEADER],MINGWRT_AT_PACKAGE_HEADERS,[dnl AT_SETUP([#include <]HEADER[>])AT_KEYWORDS([$1 $1-headers]) AS_VAR_APPEND([CPPFLAGS],[" -Wall -Wextra -Wsystem-headers"]) m4_if(HEADER,[unistd.h],AS_VAR_APPEND([CPPFLAGS],[" -Wno-deprecated-declarations"])) +m4_if(HEADER,[sys/timeb.h],AS_VAR_APPEND([CPPFLAGS],[" -Wno-deprecated-declarations"])) m4_if(HEADER,[sys/stat.h],AS_VAR_APPEND([CPPFLAGS],[" -D_MINGW_S_IFBLK_KLUDGE"])) MINGW_AT_CHECK_COMPILE([dnl #define __IN_MINGWRT_TESTSUITE__ 1 @@ -136,7 +137,7 @@ m4_foreach([LANG],[C,C++],[MINGWRT_AT_CHECK_HEADERS_STANDALONE(LANG)]) m4_define([MINGWRT_AT_CHECK_HEADERS_COMBINED],[MINGW_AT_LANG([$1])dnl AT_SETUP([#include all; language = $1])AT_KEYWORDS([$1 $1-headers]) AS_VAR_APPEND([CPPFLAGS],[" -Wall -Wextra -Wsystem-headers"]) -m4_if([$1],[C],AS_VAR_APPEND([CPPFLAGS],[" -Wno-deprecated-declarations"])) +AS_VAR_APPEND([CPPFLAGS],[" -Wno-deprecated-declarations"]) MINGW_AT_CHECK_COMPILE([dnl #define _MINGW_S_IFBLK_KLUDGE 1 #define __IN_MINGWRT_TESTSUITE__ 1 https://sf.net/p/mingw/mingw-org-wsl/ci/b0a6e63e896cf28447d2312375976bf111cbc100/ commit b0a6e63e896cf28447d2312375976bf111cbc100 Author: Keith Marshall <ke...@us...> Date: Thu Feb 22 20:00:40 2018 +0000 Correct Windows version support for <utime.h> functions. diff --git a/mingwrt/ChangeLog b/mingwrt/ChangeLog index c37a822..ab5367c 100644 --- a/mingwrt/ChangeLog +++ b/mingwrt/ChangeLog @@ -1,3 +1,24 @@ +2018-02-22 Keith Marshall <ke...@us...> + + Correct Windows version support for <utime.h> functions. + + * include/sys/utime.h: Tidy layout; assert copyright. + (_UTIME_H_): Rename this repeat inclusion guard macro... + (_SYS_UTIME_H): ...to this, for consistency with current practice. + (_BEGIN_C_DECLS, _END_C_DECLS): Use them, as appropriate. + (struct __utimbuf32): Define it unconditionally; remove... + [__MSVCRT_VERSION__>=0x0800]: ...this prerequisite. + (_utime32, _wutime32, _futime32): Declare them for... + [_WIN32_WINNT >= _WIN32_WINNT_VISTA]: ...this, in addition to... + [__MSVCRT_VERSION__>=__MSVCR80_DLL]: ...this original condition, but + also emulate them in-line, if neither condition applies. + [__MSVCRT_VERSION__>=__MSVCR80.DLL] (_utime, _wutime, _futime): + Implement them in-line, delegating each respectively to... + [_USE_32BIT_TIME_T] (_utime32, _wutime32, _futime32): ...these, or... + [!_USE_32BIT_TIME_T] (_utime64, _wutime64, _futime64): ...to these. + [__MSVCRT_VERSION__>=__MSVCR80.DLL] (utime): Implement in-line, or... + [__MSVCRT_VERSION__<__MSVCR80.DLL] (utime): ...declare it. + 2018-01-17 Keith Marshall <ke...@us...> Fix faulty POSIX deprecation warning logic. diff --git a/mingwrt/include/sys/utime.h b/mingwrt/include/sys/utime.h index 126d1ed..27086c6 100644 --- a/mingwrt/include/sys/utime.h +++ b/mingwrt/include/sys/utime.h @@ -1,110 +1,221 @@ /* - * utime.h - * This file has no copyright assigned and is placed in the Public Domain. - * This file is a part of the mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER within the package. + * sys/utime.h * - * Support for the utime function. + * Microsoft counterpart to the (now deprecated) POSIX <utime.h> header; + * unlike POSIX, Microsoft provide this as <sys/utime.h> + * + * + * $Id$ + * + * Written by Colin Peters <co...@bi...> + * Copyright (C) 1997-2001, 2003, 2004, 2007, 2018, MinGW.org Project + * + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * */ -#ifndef _UTIME_H_ -#define _UTIME_H_ +#ifndef _SYS_UTIME_H +#pragma GCC system_header +#define _SYS_UTIME_H -/* All the headers include this file. */ #include <_mingw.h> +#define __need_time_t 1 +#include <sys/types.h> +#undef __need_time_t + +#ifndef RC_INVOKED #define __need_wchar_t #define __need_size_t -#ifndef RC_INVOKED #include <stddef.h> -#endif /* Not RC_INVOKED */ -#include <sys/types.h> -#ifndef RC_INVOKED +_BEGIN_C_DECLS -/* - * Structure used by _utime function. - */ struct _utimbuf -{ - time_t actime; /* Access time */ - time_t modtime; /* Modification time */ -}; -#if __MSVCRT_VERSION__ >= 0x0800 -struct __utimbuf32 -{ - __time32_t actime; - __time32_t modtime; +{ /* Microsoft's definition for their equivalent of the POSIX utimbuf + * structure, as used in their _utime() function. + */ + time_t actime; /* last file access time */ + time_t modtime; /* last modification time */ }; -#endif /* __MSVCRT_VERSION__ >= 0x0800 */ - -#ifndef _NO_OLDNAMES -/* NOTE: Must be the same as _utimbuf above. */ +#ifndef _NO_OLDNAMES +/* Microsoft used to also support the formal POSIX structure definition, + * but have discontinued this practice; for portability, NEVER disable + * Microsoft's old names, (i.e. NEVER define _NO_OLDNAMES). + */ struct utimbuf -{ - time_t actime; - time_t modtime; +{ /* This is the POSIX compatible definition; it must EXACTLY mimic the + * Microsoft definition (as specified above). + */ + time_t actime; + time_t modtime; }; -#endif /* Not _NO_OLDNAMES */ - -#ifdef __cplusplus -extern "C" { -#endif - -#if __MSVCRT_VERSION__ < 0x0800 -_CRTIMP int __cdecl __MINGW_NOTHROW _utime (const char*, struct _utimbuf*); -#endif - -#ifndef _NO_OLDNAMES -/* FIXME for __MSVCRT_VERSION__ >= 0x0800 */ -_CRTIMP int __cdecl __MINGW_NOTHROW utime (const char*, struct utimbuf*); -#endif /* Not _NO_OLDNAMES */ - -#if __MSVCRT_VERSION__ < 0x0800 -_CRTIMP int __cdecl __MINGW_NOTHROW _futime (int, struct _utimbuf*); -#endif - -/* The wide character version, only available for MSVCRT versions of the - * C runtime library. */ -#ifdef __MSVCRT__ -#if __MSVCRT_VERSION__ < 0x0800 -_CRTIMP int __cdecl __MINGW_NOTHROW _wutime (const wchar_t*, struct _utimbuf*); -#endif -#endif /* MSVCRT runtime */ - -/* These require newer versions of msvcrt.dll (6.10 or higher). */ -#if __MSVCRT_VERSION__ >= 0x0601 +#endif /* !_NO_OLDNAMES */ + +struct __utimbuf32 +{ /* A 32-bit-explicit equivalent for struct _utimbuf; technically, + * Microsoft don't support this, before the release of Vista, other + * than on non-free runtimes from MSVCR80.DLL onwards, but since it + * is fundamentally identical to struct _utimbuf on those platforms + * which do not explicitly support it, and WE provide emulation for + * the associated 32-bit-explicit functions on those platforms, it + * is convenient for us to define it unconditionally. + */ + __time32_t actime; + __time32_t modtime; +}; + +#if defined _WIN64 /* FIXME: is this true, for ALL Win64 versions? */ \ + || _WIN32_WINNT >= _WIN32_WINNT_VISTA || __MSVCRT_VERSION__ >= __MSVCR80_DLL + /* The associated 32-bit-explicit functions are implemented in, and exported + * from MSVCRT.DLL, from Vista onwards, and versions of non-free MSVCRxx.DLL + * from MSVCR80.DLL onwards; (for any runtime version which does not satisfy + * either one of these criteria, we provide emulations below). + */ +_CRTIMP __cdecl __MINGW_NOTHROW int _utime32( const char *, struct __utimbuf32 * ); +_CRTIMP __cdecl __MINGW_NOTHROW int _wutime32( const wchar_t *, struct __utimbuf32 * ); +_CRTIMP __cdecl __MINGW_NOTHROW int _futime32( int, struct __utimbuf32 * ); +#endif /* Win-Vista and later, or MSVCR80.DLL and later */ + +#if defined _WIN64 /* ALL Win64 versions should have this! */ \ + || _WIN32_WINNT >= _WIN32_WINNT_WIN2K || __MSVCRT_VERSION__ >= __MSVCR61_DLL + /* Conversely, the 64-bit-explicit alternative functions have been supported + * by MSVCRT.DLL, from Win2K onwards, and by non-free MSVCR61.DLL and later; + * we declare them, for such platforms, but we make no provision to emulate + * them on any earlier platform. + */ struct __utimbuf64 -{ - __time64_t actime; - __time64_t modtime; +{ /* The 64-bit-explicit equivalent of struct _utimbuf; it is necessary + * to declare it, only when the functions which use it are declared... + */ + __time64_t actime; + __time64_t modtime; }; -_CRTIMP int __cdecl __MINGW_NOTHROW _utime64 (const char*, struct __utimbuf64*); -_CRTIMP int __cdecl __MINGW_NOTHROW _wutime64 (const wchar_t*, struct __utimbuf64*); -_CRTIMP int __cdecl __MINGW_NOTHROW _futime64 (int, struct __utimbuf64*); -#endif /* __MSVCRT_VERSION__ >= 0x0601 */ - -#if __MSVCRT_VERSION__ >= 0x0800 -_CRTIMP int __cdecl __MINGW_NOTHROW _utime32 (const char*, struct __utimbuf32*); -_CRTIMP int __cdecl __MINGW_NOTHROW _wutime32 (const wchar_t*, struct __utimbuf32*); -_CRTIMP int __cdecl __MINGW_NOTHROW _futime32 (int, struct __utimbuf32*); -#ifndef _USE_32BIT_TIME_T -_CRTALIAS int __cdecl __MINGW_NOTHROW _utime (const char* _v1, struct _utimbuf* _v2) { return(_utime64 (_v1,(struct __utimbuf64*)_v2)); } -_CRTALIAS int __cdecl __MINGW_NOTHROW _wutime (const wchar_t* _v1, struct _utimbuf* _v2) { return(_wutime64 (_v1,(struct __utimbuf64*)_v2)); } -_CRTALIAS int __cdecl __MINGW_NOTHROW _futime (int _v1, struct _utimbuf* _v2) { return(_futime64 (_v1,(struct __utimbuf64*)_v2)); } -#else -_CRTALIAS int __cdecl __MINGW_NOTHROW _utime (const char* _v1, struct _utimbuf* _v2) { return(_utime32 (_v1,(struct __utimbuf32*)_v2)); } -_CRTALIAS int __cdecl __MINGW_NOTHROW _wutime (const wchar_t* _v1, struct _utimbuf* _v2) { return(_wutime32 (_v1,(struct __utimbuf32*)_v2)); } -_CRTALIAS int __cdecl __MINGW_NOTHROW _futime (int _v1, struct _utimbuf* _v2) { return(_futime32 (_v1,(struct __utimbuf32*)_v2)); } -#endif -#endif /* __MSVCRT_VERSION__ >= 0x0800 */ - -#ifdef __cplusplus -} -#endif - -#endif /* Not RC_INVOKED */ - -#endif /* Not _UTIME_H_ */ +/* ...as here. + */ +_CRTIMP __cdecl __MINGW_NOTHROW int _utime64( const char *, struct __utimbuf64 * ); +_CRTIMP __cdecl __MINGW_NOTHROW int _wutime64( const wchar_t *, struct __utimbuf64 * ); +_CRTIMP __cdecl __MINGW_NOTHROW int _futime64( int, struct __utimbuf64 * ); +#endif /* Win2K and later, or MSVCR61.DLL and later */ + +#if __MSVCRT_VERSION__ >= __MSVCR80_DLL +/* Non-free MSVCRxx.DLL variants, from MSVCR80.DLL onwards, do not export + * utime(), _utime(), _wutime(), or _futime(); instead, they require in-line + * emulation, under control of Microsoft's ill-conceived _USE_32BIT_TIME_T + * feature test macro... + */ +# ifdef _USE_32BIT_TIME_T +/* ...which, when defined, causes these generic function names to be mapped + * to their 32-bit-explicit variants, (which thus retain compatibility with + * their actual implementations, as exported by MSVCRT.DLL)... + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _utime( const char * __v1, struct _utimbuf * __v2 ) +{ return _utime32( __v1, (struct __utimbuf32 *)(__v2) ); } + +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _wutime( const wchar_t * __v1, struct _utimbuf * __v2) +{ return _wutime32( __v1, (struct __utimbuf32 *)(__v2) ); } + +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _futime( int __v1, struct _utimbuf * __v2 ) +{ return _futime32( __v1, (struct __utimbuf32 *)(__v2) ); } + +# else +/* ...but, when NOT defined, they are mapped to the 64-bit-explicit + * variants, (which are incompatible with the corresponding MSVCRT.DLL + * implementations). + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _utime( const char * __v1, struct _utimbuf * __v2 ) +{ return _utime64( __v1, (struct __utimbuf64 *)(__v2) ); } + +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _wutime( const wchar_t * __v1, struct _utimbuf * __v2 ) +{ return _wutime64( __v1, (struct __utimbuf64 *)(__v2) ); } + +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _futime( int __v1, struct _utimbuf * __v2 ) +{ return _futime64( __v1, (struct __utimbuf64 *)(__v2) ); } + +# endif /* !_USE_32BIT_TIME_T */ + +# ifndef _NO_OLDNAMES +/* The POSIX compatible (Microsoft old name) function must also be + * emulated; it maps to whatever in-line implementation has become + * applicable for _utime() + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int utime( const char * __v1, struct _utimbuf * __v2 ) +{ return _utime( __v1, (struct _utimbuf *)(__v2) ); } +# endif /* !_NO_OLDNAMES */ + +#else /* __MSVCRT_VERSION__ < __MSVCR80_DLL */ +/* When using CRTDLL.DLL, MSVCRT.DLL, or non-free MSVCRxx.DLL prior to + * MSVCR80.DLL, each of the preceding functions is physically exported. + */ +_CRTIMP __cdecl __MINGW_NOTHROW int _utime( const char *, struct _utimbuf * ); +_CRTIMP __cdecl __MINGW_NOTHROW int _futime( int, struct _utimbuf * ); + +# ifdef __MSVCRT__ +/* The wide character version is only available when linking with MSVCRT.DLL, + * (or non-free MSVCRxx.DLL variants); this is not declared, when linking with + * CRTDLL.DLL + */ +_CRTIMP __cdecl __MINGW_NOTHROW int _wutime( const wchar_t *, struct _utimbuf * ); +# endif /* MSVCRT.DLL only */ + +# if _WIN32_WINNT < _WIN32_WINNT_VISTA +/* However, there is no physical implementation of any 32-bit-explict + * function variant, prior to Vista, so emulate them. + * + * FIXME: maybe only if _MINGW32_SOURCE_EXTENDED is specified? + */ +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _utime32( const char *__v1, struct __utimbuf32 *__v2 ) +{ return _utime( __v1, (struct _utimbuf *)(__v2) ); } + +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _futime32( int __v1, struct __utimbuf32 *__v2 ) +{ return _futime( __v1, (struct _utimbuf *)(__v2) ); } + +__CRT_ALIAS __cdecl __MINGW_NOTHROW +int _wutime32( const wchar_t *__v1, struct __utimbuf32 *__v2 ) +{ return _wutime( __v1, (struct _utimbuf *)(__v2) ); } + +# endif /* _WIN32_WINNT < _WIN32_WINNT_VISTA */ + +# ifndef _NO_OLDNAMES +/* Strictly, the POSIX compatible utime() function is exported only by + * MSVCRT.DLL from Vista onwards, but it APPEARS to be exported, by way + * of a libmoldnames.a trampoline, for any MSVCRT.DLL which exports a + * physical _utime() implementation. + */ +_CRTIMP __cdecl __MINGW_NOTHROW int utime( const char *, struct utimbuf * ); + +# endif /* !_NO_OLDNAMES */ +#endif /* __MSVCRT_VERSION__ < __MSVCR80_DLL */ + +_END_C_DECLS + +#endif /* ! RC_INVOKED */ +#endif /* !_SYS_UTIME_H: $RCSfile$: end of file */ ----------------------------------------------------------------------- Summary of changes: mingwrt/ChangeLog | 49 ++++++++ mingwrt/include/sys/timeb.h | 216 +++++++++++++++++++++----------- mingwrt/include/sys/utime.h | 291 ++++++++++++++++++++++++++++++-------------- mingwrt/tests/headers.at | 3 +- 4 files changed, 399 insertions(+), 160 deletions(-) hooks/post-receive -- Repository: mingw-org-wsl |