diff options
author | Conrad Scott <conrad.scott@dsl.pipex.com> | 2002-06-16 19:42:51 +0400 |
---|---|---|
committer | Conrad Scott <conrad.scott@dsl.pipex.com> | 2002-06-16 19:42:51 +0400 |
commit | 13f76ab2f4d3e4f91485668062d6681c9fc8543a (patch) | |
tree | 7653352702b27b7fe7dbc0d6a994020f14131e16 /winsup/cygwin | |
parent | 0fda7719cf899fc816b72894268ba68a039cc0db (diff) |
* include/cygwin/cygserver.h (client_request::send): Make
non-virtual.
(class client_request_attach_tty): Put client- and server-specific
interfaces inside #ifdef/#ifndef __INSIDE_CYGWIN__ guards.
* cygserver_client.cc: Ditto.
(cygserver_init): Fix error handling.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r-- | winsup/cygwin/ChangeLog | 9 | ||||
-rwxr-xr-x | winsup/cygwin/cygserver_client.cc | 75 | ||||
-rwxr-xr-x | winsup/cygwin/include/cygwin/cygserver.h | 25 |
3 files changed, 70 insertions, 39 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 93798e816..34040b93b 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,14 @@ 2002-06-16 Conrad Scott <conrad.scott@dsl.pipex.com> + * include/cygwin/cygserver.h (client_request::send): Make + non-virtual. + (class client_request_attach_tty): Put client- and server-specific + interfaces inside #ifdef/#ifndef __INSIDE_CYGWIN__ guards. + * cygserver_client.cc: Ditto. + (cygserver_init): Fix error handling. + +2002-06-16 Conrad Scott <conrad.scott@dsl.pipex.com> + * cygserver.cc: Throughout the code, check and correct level of the XXX_printf() functions used. Comment out several of the debug_printf() calls with "// verbose:". Reformat and correct diff --git a/winsup/cygwin/cygserver_client.cc b/winsup/cygwin/cygserver_client.cc index 770825d09..bd34d66a3 100755 --- a/winsup/cygwin/cygserver_client.cc +++ b/winsup/cygwin/cygserver_client.cc @@ -36,6 +36,8 @@ client_request_get_version::client_request_get_version () : client_request (CYGS buffer = (char *)&version; } +#ifndef __INSIDE_CYGWIN__ + client_request_attach_tty::client_request_attach_tty () : client_request (CYGSERVER_REQUEST_ATTACH_TTY, sizeof (req)) { buffer = (char *)&req; @@ -45,6 +47,8 @@ client_request_attach_tty::client_request_attach_tty () : client_request (CYGSER req.to_master = NULL; } +#else /* __INSIDE_CYGWIN__ */ + client_request_attach_tty::client_request_attach_tty (DWORD npid, DWORD nmaster_pid, HANDLE nfrom_master, HANDLE nto_master) : client_request (CYGSERVER_REQUEST_ATTACH_TTY, sizeof (req)) { buffer = (char *)&req; @@ -54,6 +58,8 @@ client_request_attach_tty::client_request_attach_tty (DWORD npid, DWORD nmaster_ req.to_master = nto_master; } +#endif /* __INSIDE_CYGWIN__ */ + client_request_shutdown::client_request_shutdown () : client_request (CYGSERVER_REQUEST_SHUTDOWN, 0) { buffer = NULL; @@ -102,6 +108,8 @@ client_request::send (transport_layer_base *conn) debug_printf ("completed ok"); } +#ifdef __INSIDE_CYGWIN__ + /* Oh, BTW: Fix the procedural basis and make this more intuitive. */ int @@ -165,38 +173,51 @@ check_cygserver_available () void cygserver_init () { - int rc; - if (allow_daemon != TRUE) + if (!allow_daemon) { cygserver_running = CYGSERVER_DEAD; return; } - if (cygserver_running==CYGSERVER_OK) + if (cygserver_running == CYGSERVER_OK) return; - client_request_get_version *req = - new client_request_get_version (); - - rc = cygserver_request (req); - delete req; - if (rc < 0) - cygserver_running = CYGSERVER_DEAD; - else if (rc > 0) - api_fatal ("error connecting to cygwin server. error: %d", rc); - else if (req->version.major != CYGWIN_SERVER_VERSION_MAJOR || - req->version.api != CYGWIN_SERVER_VERSION_API || - req->version.minor > CYGWIN_SERVER_VERSION_MINOR) - api_fatal ("incompatible version of cygwin server.\ - client version %d.%d.%d.%d, server version%ld.%ld.%ld.%ld", - CYGWIN_SERVER_VERSION_MAJOR, - CYGWIN_SERVER_VERSION_API, - CYGWIN_SERVER_VERSION_MINOR, - CYGWIN_SERVER_VERSION_PATCH, - req->version.major, - req->version.api, - req->version.minor, - req->version.patch); - else - cygserver_running = CYGSERVER_OK; + client_request_get_version req; + + // This indicates that we failed to connect to cygserver at all but + // that's fine as cygwin doesn't need it to be running. + if (cygserver_request (&req) == -1) + { + cygserver_running = CYGSERVER_DEAD; + return; + } + + // We connected to the server but something went wrong after that + // (sending the message, cygserver itself, or receiving the reply). + if (req.header.error_code != 0) + { + cygserver_running = CYGSERVER_DEAD; + debug_printf ("failure in cygserver version request: %d", + req.header.error_code); + debug_printf ("process will continue without cygserver support"); + return; + } + + if (req.version.major != CYGWIN_SERVER_VERSION_MAJOR || + req.version.api != CYGWIN_SERVER_VERSION_API || + req.version.minor > CYGWIN_SERVER_VERSION_MINOR) + api_fatal ("incompatible version of cygwin server:\n" + "client version %d.%d.%d.%d, server version %ld.%ld.%ld.%ld", + CYGWIN_SERVER_VERSION_MAJOR, + CYGWIN_SERVER_VERSION_API, + CYGWIN_SERVER_VERSION_MINOR, + CYGWIN_SERVER_VERSION_PATCH, + req.version.major, + req.version.api, + req.version.minor, + req.version.patch); + + cygserver_running = CYGSERVER_OK; } + +#endif /* __INSIDE_CYGWIN__ */ diff --git a/winsup/cygwin/include/cygwin/cygserver.h b/winsup/cygwin/include/cygwin/cygserver.h index c7a04929f..de4e04b0e 100755 --- a/winsup/cygwin/include/cygwin/cygserver.h +++ b/winsup/cygwin/include/cygwin/cygserver.h @@ -38,11 +38,11 @@ typedef enum { class request_header { - public: - ssize_t cb; - cygserver_request_code req_id; - ssize_t error_code; - request_header (cygserver_request_code id, ssize_t ncb) : cb (ncb), req_id (id), error_code (0) {} ; +public: + ssize_t cb; + cygserver_request_code req_id; + ssize_t error_code; + request_header (cygserver_request_code id, ssize_t ncb) : cb (ncb), req_id (id), error_code (0) {} ; } #ifdef __GNUC__ __attribute__ ((packed)) @@ -85,9 +85,9 @@ struct request_attach_tty class client_request { - public: +public: client_request (cygserver_request_code id, ssize_t data_size); - virtual void send (transport_layer_base *conn); + void send (transport_layer_base *conn); #ifndef __INSIDE_CYGWIN__ virtual void serve (transport_layer_base *conn, class process_cache *cache); #endif @@ -100,7 +100,7 @@ class client_request class client_request_get_version : public client_request { - public: +public: #ifndef __INSIDE_CYGWIN__ virtual void serve (transport_layer_base *conn, class process_cache *cache); #endif @@ -110,7 +110,7 @@ class client_request_get_version : public client_request class client_request_shutdown : public client_request { - public: +public: #ifndef __INSIDE_CYGWIN__ virtual void serve (transport_layer_base *conn, class process_cache *cache); #endif @@ -119,12 +119,13 @@ class client_request_shutdown : public client_request class client_request_attach_tty : public client_request { - public: +public: #ifndef __INSIDE_CYGWIN__ virtual void serve (transport_layer_base *conn, class process_cache *cache); -#endif client_request_attach_tty (); +#else client_request_attach_tty (DWORD npid, DWORD nmaster_pid, HANDLE nfrom_master, HANDLE nto_master); +#endif HANDLE from_master () {return req.from_master;}; HANDLE to_master () {return req.to_master;}; struct request_attach_tty req; @@ -132,4 +133,4 @@ class client_request_attach_tty : public client_request extern int cygserver_request (client_request *); -#endif /* _CYGSERVER+H+ */ +#endif /* _CYGSERVER_H_ */ |