summaryrefslogtreecommitdiff
path: root/compat/win32.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-01-23 13:34:36 -0800
committerJunio C Hamano <gitster@pobox.com>2026-01-23 13:34:37 -0800
commit26f50ef98f78f3fb86cd4c94cd85fa09bf1221d0 (patch)
tree22e3a37cd01a08f12ea26eca600fc0d210737435 /compat/win32.h
parentf2e92f7b04fb842f02af8e89894351c9f6951af2 (diff)
parent44af34bde7db9430b31a5891c3d1e6d34fefae76 (diff)
downloadgit-26f50ef98f78f3fb86cd4c94cd85fa09bf1221d0.tar.xz
Merge branch 'js/symlink-windows'
Upstream symbolic link support on Windows from Git-for-Windows. * js/symlink-windows: mingw: special-case index entries for symlinks with buggy size mingw: emulate `stat()` a little more faithfully mingw: try to create symlinks without elevated permissions mingw: add support for symlinks to directories mingw: implement basic `symlink()` functionality (file symlinks only) mingw: implement `readlink()` mingw: allow `mingw_chdir()` to change to symlink-resolved directories mingw: support renaming symlinks mingw: handle symlinks to directories in `mingw_unlink()` mingw: add symlink-specific error codes mingw: change default of `core.symlinks` to false mingw: factor out the retry logic mingw: compute the correct size for symlinks in `mingw_lstat()` mingw: teach dirent about symlinks mingw: let `mingw_lstat()` error early upon problems with reparse points mingw: drop the separate `do_lstat()` function mingw: implement `stat()` with symlink support mingw: don't call `GetFileAttributes()` twice in `mingw_lstat()`
Diffstat (limited to 'compat/win32.h')
-rw-r--r--compat/win32.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/compat/win32.h b/compat/win32.h
index a97e880757..671bcc81f9 100644
--- a/compat/win32.h
+++ b/compat/win32.h
@@ -6,10 +6,12 @@
#include <windows.h>
#endif
-static inline int file_attr_to_st_mode (DWORD attr)
+static inline int file_attr_to_st_mode (DWORD attr, DWORD tag)
{
int fMode = S_IREAD;
- if (attr & FILE_ATTRIBUTE_DIRECTORY)
+ if ((attr & FILE_ATTRIBUTE_REPARSE_POINT) && tag == IO_REPARSE_TAG_SYMLINK)
+ fMode |= S_IFLNK;
+ else if (attr & FILE_ATTRIBUTE_DIRECTORY)
fMode |= S_IFDIR;
else
fMode |= S_IFREG;