• Thomas Munro's avatar
    Fix get_dirent_type() for symlinks on MinGW/MSYS. · 5ad478c9
    Thomas Munro authored
    On Windows with MSVC, get_dirent_type() was recently made to return
    DT_LNK for junction points by commit 9d3444dc, which fixed some
    defective dirent.c code.
    
    On Windows with Cygwin, get_dirent_type() already worked for symlinks,
    as it does on POSIX systems, because Cygwin has its own fake symlinks
    that behave like POSIX (on closer inspection, Cygwin's dirent has the
    BSD d_type extension but it's probably always DT_UNKNOWN, so we fall
    back to lstat(), which understands Cygwin symlinks with S_ISLNK()).
    
    On Windows with MinGW/MSYS, we need extra code, because the MinGW
    runtime has its own readdir() without d_type, and the lstat()-based
    fallback has no knowledge of our convention for treating junctions as
    symlinks.
    
    Back-patch to 14, where get_dirent_type() landed.
    Reported-by: default avatarAndrew Dunstan <andrew@dunslane.net>
    Discussion: https://postgr.es/m/b9ddf605-6b36-f90d-7c30-7b3e95c46276%40dunslane.net
    5ad478c9
file_utils.c 12 KB