diff options
author | Pierre Humblet <phumblet@phumblet.no-ip.org> | 2003-09-25 02:29:05 +0000 |
---|---|---|
committer | Pierre Humblet <phumblet@phumblet.no-ip.org> | 2003-09-25 02:29:05 +0000 |
commit | 138847683d28920eda599f2125c71cc5a1f7a874 (patch) | |
tree | 49a4c9cd9168abb65bb60427eae25a3dd6077b3e /winsup/cygwin/shared.cc | |
parent | a4e167fa277343ca039501010fdebe26d246fc22 (diff) | |
download | cygnal-138847683d28920eda599f2125c71cc5a1f7a874.tar.gz cygnal-138847683d28920eda599f2125c71cc5a1f7a874.tar.bz2 cygnal-138847683d28920eda599f2125c71cc5a1f7a874.zip |
2003-09-24 Pierre Humblet <pierre.humblet@ieee.org>
* shared_info.h (class user_info): New.
(cygwin_user_h): New.
(user_shared): New.
(enum shared_locations): Replace SH_MOUNT_TABLE by SH_USER_SHARED;
(mount_table): Change from variable to macro.
* shared.cc: Use sizeof(user_info) in "offsets".
(user_shared_initialize): Add "reinit" argument to indicate need
to reinitialize the mapping. Replace "mount_table" by "user_shared"
throughout. Call user_shared->mountinfo.init and
user_shared->delqueue.init.
(shared_info::initialize): Do not call delqueue.init.
(memory_init): Add argument to user_shared_initialize.
* child_info.h (child_info::mount_h): Delete.
(child_info::user_h): New.
* sigpproc.cc (init_child_info): Use user_h instead of mount_h.
* dcrt0.cc (_dll_crt0): Ditto.
* fhandler_disk_file.cc (fhandler_disk_file::close): Use
user_shared->delqueue instead of cygwin_shared->delqueue.
* fhandler_virtual.cc (fhandler_virtual::close): Ditto.
* syscalls.cc (close_all_files): Ditto.
(unlink): Ditto.
(seteuid32): Add argument to user_shared_initialize.
Diffstat (limited to 'winsup/cygwin/shared.cc')
-rw-r--r-- | winsup/cygwin/shared.cc | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc index eab999040..911465aea 100644 --- a/winsup/cygwin/shared.cc +++ b/winsup/cygwin/shared.cc @@ -28,8 +28,8 @@ details. */ #include "child_info.h" shared_info NO_COPY *cygwin_shared; -mount_info NO_COPY *mount_table; -HANDLE NO_COPY cygwin_mount_h; +user_info NO_COPY *user_shared; +HANDLE NO_COPY cygwin_user_h; char * __stdcall shared_name (char *ret_buf, const char *str, int num) @@ -54,14 +54,14 @@ static char *offsets[] = + pround (sizeof (shared_info)), (char *) cygwin_shared_address + pround (sizeof (shared_info)) - + pround (sizeof (mount_info)), + + pround (sizeof (user_info)), (char *) cygwin_shared_address + pround (sizeof (shared_info)) - + pround (sizeof (mount_info)) + + pround (sizeof (user_info)) + pround (sizeof (console_state)), (char *) cygwin_shared_address + pround (sizeof (shared_info)) - + pround (sizeof (mount_info)) + + pround (sizeof (user_info)) + pround (sizeof (console_state)) + pround (sizeof (_pinfo)) }; @@ -146,50 +146,54 @@ open_shared (const char *name, int n, HANDLE &shared_h, DWORD size, } void -user_shared_initialize () +user_shared_initialize (bool reinit) { - char name[UNLEN + 1] = ""; + char name[UNLEN + 1] = ""; /* Large enough for SID */ - if (wincap.has_security ()) + if (reinit) { - cygsid tu (cygheap->user.sid ()); - tu.string (name); + if (!UnmapViewOfFile (user_shared)) + debug_printf("UnmapViewOfFile %E"); + if (!ForceCloseHandle (cygwin_user_h)) + debug_printf("CloseHandle %E"); + cygwin_user_h = NULL; } - else - strcpy (name, cygheap->user.name ()); - if (cygwin_mount_h) /* Reinit */ + if (!cygwin_user_h) { - if (!UnmapViewOfFile (mount_table)) - debug_printf("UnmapViewOfFile %E"); - if (!ForceCloseHandle (cygwin_mount_h)) - debug_printf("CloseHandle %E"); - cygwin_mount_h = NULL; + if (wincap.has_security ()) + { + cygsid tu (cygheap->user.sid ()); + tu.string (name); + } + else + strcpy (name, cygheap->user.name ()); } - mount_table = (mount_info *) open_shared (name, MOUNT_VERSION, - cygwin_mount_h, sizeof (mount_info), - SH_MOUNT_TABLE, &sec_none); - debug_printf ("opening mount table for '%s' at %p", name, - mount_table); - ProtectHandleINH (cygwin_mount_h); - debug_printf ("mount table version %x at %p", mount_table->version, mount_table); + user_shared = (user_info *) open_shared (name, USER_VERSION, + cygwin_user_h, sizeof (user_info), + SH_USER_SHARED, &sec_none); + debug_printf ("opening user shared for '%s' at %p", name, user_shared); + ProtectHandleINH (cygwin_user_h); + debug_printf ("user shared version %x", user_shared->version); - /* Initialize the Cygwin per-user mount table, if necessary */ - if (!mount_table->version) + /* Initialize the Cygwin per-user shared, if necessary */ + if (!user_shared->version) { - mount_table->version = MOUNT_VERSION_MAGIC; - debug_printf ("initializing mount table"); - mount_table->cb = sizeof (*mount_table); - if (mount_table->cb != MOUNT_INFO_CB) - system_printf ("size of mount table region changed from %u to %u", - MOUNT_INFO_CB, mount_table->cb); - mount_table->init (); /* Initialize the mount table. */ + user_shared->version = USER_VERSION_MAGIC; + debug_printf ("initializing user shared"); + user_shared->cb = sizeof (*user_shared); + if (user_shared->cb != sizeof (*user_shared)) + system_printf ("size of user shared region changed from %u to %u", + sizeof (*user_shared), user_shared->cb); + user_shared->mountinfo.init (); /* Initialize the mount table. */ + /* Initialize the queue of deleted files. */ + user_shared->delqueue.init (); } - else if (mount_table->version != MOUNT_VERSION_MAGIC) - multiple_cygwin_problem ("mount", mount_table->version, MOUNT_VERSION); - else if (mount_table->cb != MOUNT_INFO_CB) - multiple_cygwin_problem ("mount table size", mount_table->cb, MOUNT_INFO_CB); + else if (user_shared->version != USER_VERSION_MAGIC) + multiple_cygwin_problem ("user", user_shared->version, USER_VERSION_MAGIC); + else if (user_shared->cb != sizeof (*user_shared)) + multiple_cygwin_problem ("user shared size", user_shared->cb, sizeof (*user_shared)); } void @@ -198,9 +202,6 @@ shared_info::initialize () DWORD sversion = (DWORD) InterlockedExchange ((LONG *) &version, SHARED_VERSION_MAGIC); if (!sversion) { - /* Initialize the queue of deleted files. */ - delqueue.init (); - /* Initialize tty table. */ tty.init (); } @@ -249,7 +250,7 @@ memory_init () cygheap->shared_h = shared_h; ProtectHandleINH (cygheap->shared_h); - user_shared_initialize (); + user_shared_initialize (false); } unsigned |