mingw: use CreateHardLink()
directly
The function `CreateHardLink()` is available in all supported Windows versions (even since Windows XP), so there is no more need to resolve it at runtime. Helped-by: Max Kirillov <max@max630.net> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d166e6afe5
commit
1e1a876bb2
@ -2211,24 +2211,12 @@ int mingw_raise(int sig)
|
|||||||
|
|
||||||
int link(const char *oldpath, const char *newpath)
|
int link(const char *oldpath, const char *newpath)
|
||||||
{
|
{
|
||||||
typedef BOOL (WINAPI *T)(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES);
|
|
||||||
static T create_hard_link = NULL;
|
|
||||||
wchar_t woldpath[MAX_PATH], wnewpath[MAX_PATH];
|
wchar_t woldpath[MAX_PATH], wnewpath[MAX_PATH];
|
||||||
if (xutftowcs_path(woldpath, oldpath) < 0 ||
|
if (xutftowcs_path(woldpath, oldpath) < 0 ||
|
||||||
xutftowcs_path(wnewpath, newpath) < 0)
|
xutftowcs_path(wnewpath, newpath) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!create_hard_link) {
|
if (!CreateHardLinkW(wnewpath, woldpath, NULL)) {
|
||||||
create_hard_link = (T) GetProcAddress(
|
|
||||||
GetModuleHandle("kernel32.dll"), "CreateHardLinkW");
|
|
||||||
if (!create_hard_link)
|
|
||||||
create_hard_link = (T)-1;
|
|
||||||
}
|
|
||||||
if (create_hard_link == (T)-1) {
|
|
||||||
errno = ENOSYS;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!create_hard_link(wnewpath, woldpath, NULL)) {
|
|
||||||
errno = err_win_to_posix(GetLastError());
|
errno = err_win_to_posix(GetLastError());
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user