diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-12-01 14:16:20 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-12-01 14:16:20 +0300 |
commit | 4febe95f89e491c20503330fbad530d53d7ea4fa (patch) | |
tree | 77c9001abb28f23567ff2cfc6a6359aa7fc48b12 /winsup | |
parent | cb766c47bbc85377efabebbb6e34420f80be9aa3 (diff) |
* shared.cc (shared_name): Take into account the SE_CREATE_GLOBAL_NAME
privilege when building the name string.
(open_shared): Remove the call to OpenFileMapping.
(shared_info::initialize): Move cygheap initialization to ...
(memory_init): ... here. Suppress now useless shared_h variable.
(user_shared_initialize): Make tu a cygpsid.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 9 | ||||
-rw-r--r-- | winsup/cygwin/shared.cc | 38 |
2 files changed, 26 insertions, 21 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 0fcd078f9..12f2b7001 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2003-12-01 Pierre Humblet <pierre.humblet@ieee.org> + + * shared.cc (shared_name): Take into account the SE_CREATE_GLOBAL_NAME + privilege when building the name string. + (open_shared): Remove the call to OpenFileMapping. + (shared_info::initialize): Move cygheap initialization to ... + (memory_init): ... here. Suppress now useless shared_h variable. + (user_shared_initialize): Make tu a cygpsid. + 2003-12-01 Dr. Volker Zell <Dr.Volker.Zell@oracle.com> * include/tzfile.h: Remove duplicate definition of TM_SUNDAY. diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc index 9bec8c040..a0d9e9655 100644 --- a/winsup/cygwin/shared.cc +++ b/winsup/cygwin/shared.cc @@ -35,9 +35,12 @@ char * __stdcall shared_name (char *ret_buf, const char *str, int num) { extern bool _cygwin_testing; + static const char *prefix = + wincap.has_terminal_services () + && (set_process_privilege (SE_CREATE_GLOBAL_NAME, true) >= 0 + || GetLastError () == ERROR_NO_SUCH_PRIVILEGE) ? "Global\\" : ""; - __small_sprintf (ret_buf, "%s%s.%s.%d", - wincap.has_terminal_services () ? "Global\\" : "", + __small_sprintf (ret_buf, "%s%s.%s.%d", prefix, cygwin_version.shared_id, str, num); if (_cygwin_testing) strcat (ret_buf, cygwin_version.dll_build_date); @@ -91,15 +94,10 @@ open_shared (const char *name, int n, HANDLE &shared_h, DWORD size, if (!name) mapname = NULL; else - { - mapname = shared_name (map_buf, name, n); - shared_h = OpenFileMappingA (FILE_MAP_READ | FILE_MAP_WRITE, - TRUE, mapname); - } - if (!shared_h && - !(shared_h = CreateFileMapping (INVALID_HANDLE_VALUE, psa, + mapname = shared_name (map_buf, name, n); + if (!(shared_h = CreateFileMapping (INVALID_HANDLE_VALUE, psa, PAGE_READWRITE, 0, size, mapname))) - api_fatal ("CreateFileMapping, %E. Terminating."); + api_fatal ("CreateFileMapping %s, %E. Terminating.", mapname); } shared = (shared_info *) @@ -163,7 +161,7 @@ user_shared_initialize (bool reinit) { if (wincap.has_security ()) { - cygsid tu (cygheap->user.sid ()); + cygpsid tu (cygheap->user.sid ()); tu.string (name); } else @@ -216,13 +214,6 @@ shared_info::initialize () low_priority_sleep (0); // Should be hit only very very rarely } - /* Initialize the Cygwin heap, if necessary */ - if (!cygheap) - { - cygheap_init (); - cygheap->user.init (); - } - heap_init (); if (!sversion) @@ -238,16 +229,21 @@ memory_init () { getpagesize (); + /* Initialize the Cygwin heap, if necessary */ + if (!cygheap) + { + cygheap_init (); + cygheap->user.init (); + } + /* Initialize general shared memory */ - HANDLE shared_h = cygheap ? cygheap->shared_h : NULL; cygwin_shared = (shared_info *) open_shared ("shared", CYGWIN_VERSION_SHARED_DATA, - shared_h, + cygheap->shared_h, sizeof (*cygwin_shared), SH_CYGWIN_SHARED); cygwin_shared->initialize (); - cygheap->shared_h = shared_h; ProtectHandleINH (cygheap->shared_h); user_shared_initialize (false); |