* Makefile.in: Add `-lshell32 -luuid' to link pass for new-cygwin1.dll.
* autoload.cc: Add LoadDLLinitfunc for ole32.dll. Add LoadDLLfuncEx statements for CoInitialize@4, CoUninitialize@0 and CoCreateInstance@20. * dir.cc (dir_suffixes): New datastructure. (readdir): Check for R/O *.lnk files to hide the suffix. (opendir): Use `dir_suffixes' in path conversion. (rmdir): Ditto. * fhandler.cc (fhandler_disk_file::fstat): Add S_IFLNK flag before calling `get_file_attribute'. Take FILE_ATTRIBUTE_READONLY into account only if the file is no symlink. * path.cc (inner_suffixes): New datastructure. (SYMLINKATTR): Eliminated. (path_conv::check): Use `inner_suffixes' on inner path components. (shortcut_header): New global static variable. (shortcut_initalized): Ditto. (create_shortcut_header): New function. (cmp_shortcut_header): Ditto. (symlink): Create symlinks by creating windows shortcuts. Preserve the old code. (symlink_info::check_shortcut): New method. (symlink_info::check_sysfile): Ditto. (symlink_info::check): Check for shortcuts. Move code reading old system attribute symlinks into symlink_info::check_sysfile(). (chdir): Use `dir_suffixes' in path conversion. * security.cc (get_file_attribute): Check for S_IFLNK flag. Force 0777 permissions then. * spawn.cc (std_suffixes): Add ".lnk" suffix. * syscalls.cc (_unlink): Use `inner_suffixes' in path conversion. Check for shortcut symlinks to eliminate R/O attribute before calling DeleteFile(). (stat_suffixes): Add ".lnk" suffix. (stat_worker): Force 0777 permissions if file is a symlink.
This commit is contained in:
@ -90,6 +90,13 @@ LoadDLLinitfunc (advapi32)
|
||||
LoadDLLinitfunc (netapi32)
|
||||
{
|
||||
HANDLE h;
|
||||
static NO_COPY LONG here = -1L;
|
||||
|
||||
while (InterlockedIncrement (&here))
|
||||
{
|
||||
InterlockedDecrement (&here);
|
||||
Sleep (0);
|
||||
}
|
||||
|
||||
if ((h = LoadLibrary ("netapi32.dll")) != NULL)
|
||||
netapi32_handle = h;
|
||||
@ -197,6 +204,28 @@ LoadDLLinitfunc (iphlpapi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
LoadDLLinitfunc (ole32)
|
||||
{
|
||||
HANDLE h;
|
||||
static NO_COPY LONG here = -1L;
|
||||
|
||||
while (InterlockedIncrement (&here))
|
||||
{
|
||||
InterlockedDecrement (&here);
|
||||
Sleep (0);
|
||||
}
|
||||
|
||||
if (ole32_handle)
|
||||
/* nothing to do */;
|
||||
else if ((h = LoadLibrary ("ole32.dll")) != NULL)
|
||||
ole32_handle = h;
|
||||
else if (!ole32_handle)
|
||||
api_fatal ("could not load ole32.dll, %E");
|
||||
|
||||
InterlockedDecrement (&here);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __stdcall dummy_autoload (void) __attribute__ ((unused));
|
||||
static void __stdcall
|
||||
dummy_autoload (void)
|
||||
@ -339,5 +368,10 @@ LoadDLLfuncEx (WSASocketA, 24, ws2_32, 1)
|
||||
LoadDLLinit (iphlpapi)
|
||||
LoadDLLfuncEx (GetIfTable, 12, iphlpapi, 1)
|
||||
LoadDLLfuncEx (GetIpAddrTable, 12, iphlpapi, 1)
|
||||
|
||||
LoadDLLinit (ole32)
|
||||
LoadDLLfunc (CoInitialize, 4, ole32)
|
||||
LoadDLLfunc (CoUninitialize, 0, ole32)
|
||||
LoadDLLfunc (CoCreateInstance, 20, ole32)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user