From 282113ba894449ed17e85b296cf0760d5206ac8d Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 19 Nov 2003 18:49:41 +0000 Subject: Don't use safe_new but new throughout. Fix copyright dates throughout. * Makefile.in: Accomodate all new files and name changes. Add a *.d dependency. (sbindir): Add. (etcdir): Drop in favor of more appropriate sysconfdir definition. (sysconfdir): Add. (CXXFLAGS): Add -MMD flag. Add SYSCONFDIR definition. (.SUFFIXES): Add. (install): Add action items. (libclean): New target. (fullclean): Ditto. * bsd_helper.cc: New file. * bsd_helper.h: Ditto. * bsd_log.cc: Ditto. * bsd_log.h: Ditto. * bsd_mutex.cc: Ditto. * bsd_mutex.h: Ditto. * client.cc: Rearrange to build as less as possible if __INSIDE_CYGWIN__. (client_request::handle_request): Add Message Queue and Semaphore handling. * cygserver.cc: Rearrange to build as less as possible if __INSIDE_CYGWIN__. Use new debug/log/panic logging functions. (DEF_CONFIG_FILE): New definition for configuration file. Use throughout. (getfunc): Remove. (__cygserver__printf): Remove. (client_request_attach_tty::serve): Return error if impersonation fails. (print_usage): Pump up help message. (print_version): Add output of default configuration file. (main): Accommodate new options. Allow overwrite of threading options from config file. Call several new initialization functions. Drop printing dots. Don't define SIGHANDLE inline. * cygserver.conf: New file. * cygserver_process.h: Rename to process.h. * cygserver_transport.h: Rename to transport.h. * cygserver_transport_pipes.h: Rename to transport_pipes.h. * cygserver_transport_sockets.h: Rename to transport_sockets.h. * msg.cc: Rewrite. * sem.cc: Rewrite. * shm.cc: Rewrite. * sysv_msg.cc: New file, derived from FreeBSD version 1.52. * sysv_sem.cc: New file, derived from FreeBSD version 1.66. * sysv_shm.cc: New file, derived from FreeBSD version 1.89. * threaded_queue.cc: Rearrange to build as less as possible if __INSIDE_CYGWIN__. * transport.cc (transport_layer_base::impersonate_client): Define bool. (transport_layer_base::revert_to_self): Ditto. * transport.h (transport_layer_base::impersonate_client): Declare bool. (transport_layer_base::revert_to_self): Ditto. * transport_pipes.cc (transport_layer_pipes::transport_layer_pipes): Don't call init_security. (init_security): Remove. (transport_layer_pipes::accept): Use global sec_all_nih. (transport_layer_pipes::connect): Ditto. (transport_layer_pipes::impersonate_client): Define bool. (transport_layer_pipes::revert_to_self): Ditt. * transport_pipes.h (transport_layer_pipes::impersonate_client): Declare bool. (transport_layer_pipes::revert_to_self): Ditto. * woutsup.h: Include bsd compatibility headers. (SIGHANDLE): Add definition. (__cygserver__printf): Remove definition. (__noop_printf): Ditto. (debug_printf): Define using debug. (syscall_printf): Define using log. (system_printf): Ditto. Drop all other _printf definitions. --- winsup/cygserver/client.cc | 190 ++++++++++++++++++++++++--------------------- 1 file changed, 103 insertions(+), 87 deletions(-) (limited to 'winsup/cygserver/client.cc') diff --git a/winsup/cygserver/client.cc b/winsup/cygserver/client.cc index 600ddbd67..d8f7ac55a 100644 --- a/winsup/cygserver/client.cc +++ b/winsup/cygserver/client.cc @@ -1,6 +1,6 @@ -/* cygserver_client.cc +/* client.cc - Copyright 2001, 2002 Red Hat Inc. + Copyright 2001, 2002, 2003 Red Hat Inc. Written by Egor Duda @@ -22,11 +22,12 @@ details. */ #include #include "cygerrno.h" +#include "cygserver_msg.h" +#include "cygserver_sem.h" #include "cygserver_shm.h" -#include "safe_memory.h" #include "cygserver.h" -#include "cygserver_transport.h" +#include "transport.h" int cygserver_running = CYGSERVER_UNKNOWN; // Nb: inherited by children. @@ -48,6 +49,8 @@ client_request_get_version::client_request_get_version () * the first numbers match, that is). */ +#ifdef __INSIDE_CYGWIN__ + bool client_request_get_version::check_version () const { @@ -71,8 +74,6 @@ client_request_get_version::check_version () const return ok; } -#ifdef __INSIDE_CYGWIN__ - client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid, HANDLE nfrom_master, HANDLE nto_master) @@ -87,15 +88,6 @@ client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid, "from_master = %lu, to_master = %lu"), req.pid, req.master_pid, req.from_master, req.to_master); } - -#else /* !__INSIDE_CYGWIN__ */ - -client_request_attach_tty::client_request_attach_tty () - : client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req)) -{ - // verbose: syscall_printf ("created"); -} - #endif /* __INSIDE_CYGWIN__ */ /* @@ -230,7 +222,12 @@ client_request::send (transport_layer_base * const conn) // sizeof (_header), msglen ()); } -#ifndef __INSIDE_CYGWIN__ +#ifdef __OUTSIDE_CYGWIN__ + +client_request_attach_tty::client_request_attach_tty () + : client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req)) +{ +} /* * client_request::handle_request () @@ -277,16 +274,22 @@ client_request::handle_request (transport_layer_base *const conn, switch (header.request_code) { case CYGSERVER_REQUEST_GET_VERSION: - req = safe_new0 (client_request_get_version); + req = new client_request_get_version; break; case CYGSERVER_REQUEST_SHUTDOWN: - req = safe_new0 (client_request_shutdown); + req = new client_request_shutdown; break; case CYGSERVER_REQUEST_ATTACH_TTY: - req = safe_new0 (client_request_attach_tty); + req = new client_request_attach_tty; + break; + case CYGSERVER_REQUEST_MSG: + req = new client_request_msg; + break; + case CYGSERVER_REQUEST_SEM: + req = new client_request_sem; break; case CYGSERVER_REQUEST_SHM: - req = safe_new0 (client_request_shm); + req = new client_request_shm; break; default: syscall_printf ("unknown request code %d received: request ignored", @@ -299,74 +302,9 @@ client_request::handle_request (transport_layer_base *const conn, req->msglen (header.msglen); req->handle (conn, cache); - safe_delete (req); - -#ifndef DEBUGGING - printf ("."); // A little noise when we're being quiet. -#endif -} - -#endif /* !__INSIDE_CYGWIN__ */ - -client_request::client_request (request_code_t const id, - void * const buf, - size_t const buflen) - : _header (id, buflen), - _buf (buf), - _buflen (buflen) -{ - assert ((!_buf && !_buflen) || (_buf && _buflen)); -} - -client_request::~client_request () -{} - -int -client_request::make_request () -{ - assert (cygserver_running == CYGSERVER_UNKNOWN \ - || cygserver_running == CYGSERVER_OK \ - || cygserver_running == CYGSERVER_UNAVAIL); - - if (cygserver_running == CYGSERVER_UNKNOWN) - cygserver_init (); - - assert (cygserver_running == CYGSERVER_OK \ - || cygserver_running == CYGSERVER_UNAVAIL); - - /* Don't retry every request if the server's not there */ - if (cygserver_running == CYGSERVER_UNAVAIL) - { - syscall_printf ("cygserver un-available"); - error_code (ENOSYS); - return -1; - } - - transport_layer_base *const transport = create_server_transport (); - - assert (transport); - - if (transport->connect () == -1) - { - if (errno) - error_code (errno); - else - error_code (ENOSYS); - safe_delete (transport); - return -1; - } - - // verbose: debug_printf ("connected to server %p", transport); - - send (transport); - - safe_delete (transport); - - return 0; + delete req; } -#ifndef __INSIDE_CYGWIN__ - /* * client_request::handle () * @@ -470,7 +408,84 @@ client_request::handle (transport_layer_base *const conn, // sizeof (_header), msglen ()); } -#endif /* !__INSIDE_CYGWIN__ */ +/* The server side implementation of make_request. Very simple. */ +int +client_request::make_request () +{ + transport_layer_base *const transport = create_server_transport (); + assert (transport); + if (transport->connect () == -1) + { + if (errno) + error_code (errno); + else + error_code (ENOSYS); + delete transport; + return -1; + } + send (transport); + delete transport; + return 0; +} +#endif /* __OUTSIDE_CYGWIN__ */ + +client_request::client_request (request_code_t const id, + void * const buf, + size_t const buflen) + : _header (id, buflen), + _buf (buf), + _buflen (buflen) +{ + assert ((!_buf && !_buflen) || (_buf && _buflen)); +} + +client_request::~client_request () +{} + +#ifdef __INSIDE_CYGWIN__ +int +client_request::make_request () +{ + assert (cygserver_running == CYGSERVER_UNKNOWN \ + || cygserver_running == CYGSERVER_OK \ + || cygserver_running == CYGSERVER_UNAVAIL); + + if (cygserver_running == CYGSERVER_UNKNOWN) + cygserver_init (); + + assert (cygserver_running == CYGSERVER_OK \ + || cygserver_running == CYGSERVER_UNAVAIL); + + /* Don't retry every request if the server's not there */ + if (cygserver_running == CYGSERVER_UNAVAIL) + { + syscall_printf ("cygserver un-available"); + error_code (ENOSYS); + return -1; + } + + transport_layer_base *const transport = create_server_transport (); + + assert (transport); + + if (transport->connect () == -1) + { + if (errno) + error_code (errno); + else + error_code (ENOSYS); + delete transport; + return -1; + } + + // verbose: debug_printf ("connected to server %p", transport); + + send (transport); + + delete transport; + + return 0; +} bool check_cygserver_available () @@ -523,3 +538,4 @@ cygserver_init () if (!check_cygserver_available ()) cygserver_running = CYGSERVER_UNAVAIL; } +#endif /* __INSIDE_CYGWIN__ */ -- cgit v1.2.3