diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2001-02-21 21:49:37 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2001-02-21 21:49:37 +0000 |
commit | 10b06c5ee0712991bc7cec3688f8059069f9fcd2 (patch) | |
tree | 52156053d0ae8881b6c7e52fe3a0bc568f0eccb8 /winsup/cygwin/autoload.cc | |
parent | 5b2ea3a43613c3d93ca9549880d3fd2dbb9ec0e1 (diff) | |
download | newlib-10b06c5ee0712991bc7cec3688f8059069f9fcd2.zip newlib-10b06c5ee0712991bc7cec3688f8059069f9fcd2.tar.gz newlib-10b06c5ee0712991bc7cec3688f8059069f9fcd2.tar.bz2 |
* 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.
Diffstat (limited to 'winsup/cygwin/autoload.cc')
-rw-r--r-- | winsup/cygwin/autoload.cc | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index 00ee37b..bd035e3 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -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) } } |