diff --git a/win32/include/sys/utime.h b/win32/include/sys/utime.h
index f8f30a2..a994267 100644
--- a/win32/include/sys/utime.h
+++ b/win32/include/sys/utime.h
@@ -1,146 +1,110 @@
-/**
+/*
+ * utime.h
  * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the w64 mingw-runtime package.
- * No warranty is given; refer to the file DISCLAIMER within this package.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Support for the utime function.
+ *
  */
-#ifndef _INC_UTIME
-#define _INC_UTIME
-
-#ifndef _WIN32
-#error Only Win32 target is supported!
-#endif
+#ifndef	_UTIME_H_
+#define	_UTIME_H_
 
+/* All the headers include this file. */
 #include <_mingw.h>
 
-#pragma pack(push,_CRT_PACKING)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef _CRTIMP
-#define _CRTIMP __declspec(dllimport)
-#endif
+#define __need_wchar_t
+#define __need_size_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif	/* Not RC_INVOKED */
+#include <sys/types.h>
 
-#ifndef _WCHAR_T_DEFINED
-  typedef unsigned short wchar_t;
-#define _WCHAR_T_DEFINED
-#endif
+#ifndef	RC_INVOKED
 
-#ifndef __TINYC__ /* gr */
-#ifdef _USE_32BIT_TIME_T
-#ifdef _WIN64
-#undef _USE_32BIT_TIME_T
-#endif
-#else
-#if _INTEGRAL_MAX_BITS < 64
-#define _USE_32BIT_TIME_T
-#endif
-#endif
+/*
+ * 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;
+};
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+
+
+#ifndef	_NO_OLDNAMES
+/* NOTE: Must be the same as _utimbuf above. */
+struct utimbuf
+{
+	time_t	actime;
+	time_t	modtime;
+};
+#endif	/* Not _NO_OLDNAMES */
+
+#ifdef	__cplusplus
+extern "C" {
 #endif
 
-#ifndef _TIME32_T_DEFINED
-#define _TIME32_T_DEFINED
-  typedef long __time32_t;
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_utime (const char*, struct _utimbuf*);
 #endif
 
-#ifndef _TIME64_T_DEFINED
-#define _TIME64_T_DEFINED
-#if _INTEGRAL_MAX_BITS >= 64
-  typedef __int64 __time64_t;
-#endif
-#endif
+#ifndef	_NO_OLDNAMES
+/* FIXME for __MSVCRT_VERSION__ >= 0x0800 */
+//_CRTIMP int __cdecl __MINGW_NOTHROW	utime (const char*, struct utimbuf*);
+#endif	/* Not _NO_OLDNAMES */
 
-#ifndef _TIME_T_DEFINED
-#define _TIME_T_DEFINED
-#ifdef _USE_32BIT_TIME_T
-  typedef __time32_t time_t;
-#else
-  typedef __time64_t time_t;
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_futime (int, struct _utimbuf*);
 #endif
-#endif
-
-#ifndef _UTIMBUF_DEFINED
-#define _UTIMBUF_DEFINED
 
-  struct _utimbuf {
-    time_t actime;
-    time_t modtime;
-  };
-
-  struct __utimbuf32 {
-    __time32_t actime;
-    __time32_t modtime;
-  };
-
-#if _INTEGRAL_MAX_BITS >= 64
-  struct __utimbuf64 {
-    __time64_t actime;
-    __time64_t modtime;
-  };
+/* 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 */
 
-#ifndef	NO_OLDNAMES
-  struct utimbuf {
-    time_t actime;
-    time_t modtime;
-  };
-
-  struct utimbuf32 {
-    __time32_t actime;
-    __time32_t modtime;
-  };
-#endif
-#endif
+/* These require newer versions of msvcrt.dll (6.10 or higher).  */ 
+#if __MSVCRT_VERSION__ >= 0x0601
+struct __utimbuf64
+{
+	__time64_t actime;
+	__time64_t modtime;
+};
 
-  _CRTIMP int __cdecl _utime32(const char *_Filename,struct __utimbuf32 *_Time);
-  _CRTIMP int __cdecl _futime32(int _FileDes,struct __utimbuf32 *_Time);
-  _CRTIMP int __cdecl _wutime32(const wchar_t *_Filename,struct __utimbuf32 *_Time);
-#if _INTEGRAL_MAX_BITS >= 64
-  _CRTIMP int __cdecl _utime64(const char *_Filename,struct __utimbuf64 *_Time);
-  _CRTIMP int __cdecl _futime64(int _FileDes,struct __utimbuf64 *_Time);
-  _CRTIMP int __cdecl _wutime64(const wchar_t *_Filename,struct __utimbuf64 *_Time);
-#endif
+_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 */
 
-#ifndef RC_INVOKED
-#ifdef _USE_32BIT_TIME_T
-__CRT_INLINE int __cdecl _utime(const char *_Filename,struct _utimbuf *_Utimbuf) {
-  return _utime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
-}
-__CRT_INLINE int __cdecl _futime(int _Desc,struct _utimbuf *_Utimbuf) {
-  return _futime32(_Desc,(struct __utimbuf32 *)_Utimbuf);
-}
-__CRT_INLINE int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Utimbuf) {
-  return _wutime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
-}
+#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
-__CRT_INLINE int __cdecl _utime(const char *_Filename,struct _utimbuf *_Utimbuf) {
-  return _utime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
-}
-__CRT_INLINE int __cdecl _futime(int _Desc,struct _utimbuf *_Utimbuf) {
-  return _futime64(_Desc,(struct __utimbuf64 *)_Utimbuf);
-}
-__CRT_INLINE int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Utimbuf) {
-  return _wutime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
-}
+_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 */
 
-#ifndef	NO_OLDNAMES
-#ifdef _USE_32BIT_TIME_T
-__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
-  return _utime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
-}
-#else
-__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
-  return _utime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
+#ifdef	__cplusplus
 }
 #endif
-#endif
-#endif
 
-#ifdef __cplusplus
-}
-#endif
+#endif	/* Not RC_INVOKED */
 
-#pragma pack(pop)
-#endif
+#endif	/* Not _UTIME_H_ */
