| Index: source/io/ufile.c
 | 
| diff --git a/source/io/ufile.c b/source/io/ufile.c
 | 
| index a8d8f0a3a60a6b7e9d0bf76b950925dad7923ff2..ab9f70a3d5cd8490edbd60cf66f9302d3adb61f7 100644
 | 
| --- a/source/io/ufile.c
 | 
| +++ b/source/io/ufile.c
 | 
| @@ -1,7 +1,7 @@
 | 
|  /*
 | 
|  ******************************************************************************
 | 
|  *
 | 
| -*   Copyright (C) 1998-2014, International Business Machines
 | 
| +*   Copyright (C) 1998-2015, International Business Machines
 | 
|  *   Corporation and others.  All Rights Reserved.
 | 
|  *
 | 
|  ******************************************************************************
 | 
| @@ -63,7 +63,19 @@ finit_owner(FILE         *f,
 | 
|      uprv_memset(result, 0, sizeof(UFILE));
 | 
|      result->fFileno = fileno(f);
 | 
|  
 | 
| -#if U_PLATFORM_USES_ONLY_WIN32_API
 | 
| +#if U_PLATFORM_USES_ONLY_WIN32_API && _MSC_VER < 1900
 | 
| +    /*
 | 
| +     * Below is a very old workaround (ICU ticket:231).
 | 
| +     *
 | 
| +     * Previously, 'FILE*' from inside and outside ICU's DLL
 | 
| +     * were different, because they pointed into local copies
 | 
| +     * of the io block. At least by VS 2015 the implementation
 | 
| +     * is something like:
 | 
| +     *    stdio = _acrt_iob_func(0)
 | 
| +     * .. which is a function call, so should return the same pointer
 | 
| +     * regardless of call site.
 | 
| +     * As of _MSC_VER 1900 this patch is retired, at 16 years old.
 | 
| +     */
 | 
|      if (0 <= result->fFileno && result->fFileno <= 2) {
 | 
|          /* stdin, stdout and stderr need to be special cased for Windows 98 */
 | 
|  #if _MSC_VER >= 1400
 | 
| 
 |