Skip to content
  • Karsten Blees's avatar
    MSVC: fix stat definition hell · a2374f58
    Karsten Blees authored and Junio C Hamano's avatar Junio C Hamano committed
    In msvc.h, there's a couple of stat related functions defined diffently
    from mingw.h. When we remove these definitions, the only problem we get is
    "warning C4005: '_stati64' : macro redefinition" for this line in mingw.h:
    
    #define _stati64(x,y) mingw_stat(x,y)
    
    The reason is that as of MSVCR80.dll (distributed with MSVC 2005), the
    original _stati64 family of functions was renamed to _stat32i64, and the
    former function names became macros (pointing to the appropriate function
    based on the definition of _USE_32BIT_TIME_T).
    
    Defining _stati64 works on MinGW because MinGW by default compiles against
    the MSVCRT.DLL that is part of Windows (i.e. _stati64 is a function rather
    than a macro).
    
    Note: MinGW *can* compile for newer MSVC runtime versions, and MSVC
    apparently can also compile for the Windows MSVCRT.DLL via the DDK (see
    http://www.syndicateofideas.com/posts/fighting-the-msvcrt-dll-hell
    
     ).
    
    Remove the stat definitions from msvc.h, as they are not compiler related.
    
    In mingw.h, determine the runtime version in use from the definitions of
    _stati64 and _USE_32BIT_TIME_T, and define stat() accordingly.
    
    This also fixes that stat() in MSVC builds still resolves to mingw_lstat()
    instead of mingw_stat().
    
    Signed-off-by: default avatarKarsten Blees <blees@dcon.de>
    Acked-by: default avatarSebastian Schuberth <sschuberth@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    a2374f58