Skip to content

Commit

Permalink
mingw: use CreateHardLink directly
Browse files Browse the repository at this point in the history
It was observed that the current implementation of of get_proc_addr()
fails to load the kernel32.dll with code ERROR_INVALID_PARAMETER.
Probably the reason is that kernel32.dll is already loaded. The
behavior was seen at Windows SP1, both 32bit and 64bit. Probably it
would behave same way in some or all other Windows versions.

This breaks all usages of "clone --local", including the automatic
tests where they call it.

The function CreateHardLink is available in all supported Windows
versions (since Windows XP), so there is no more need to resolve it
in runtime.

Signed-off-by: Max Kirillov <[email protected]>
  • Loading branch information
max630 committed Oct 27, 2017
1 parent dbc8d81 commit e9630ae
Showing 1 changed file with 0 additions and 5 deletions.
5 changes: 0 additions & 5 deletions compat/mingw.c
Original file line number Diff line number Diff line change
Expand Up @@ -2698,13 +2698,8 @@ int mingw_raise(int sig)

int link(const char *oldpath, const char *newpath)
{
DECLARE_PROC_ADDR(kernel32.dll, BOOL, CreateHardLinkW,
LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES);
wchar_t woldpath[MAX_LONG_PATH], wnewpath[MAX_LONG_PATH];

if (!INIT_PROC_ADDR(CreateHardLinkW))
return -1;

if (xutftowcs_long_path(woldpath, oldpath) < 0 ||
xutftowcs_long_path(wnewpath, newpath) < 0)
return -1;
Expand Down

0 comments on commit e9630ae

Please sign in to comment.