public inbox for cygwin-xfree@sourceware.org help / color / mirror / Atom feed
From: Jon TURNEY <jon.turney@dronecode.org.uk> To: cygwin-xfree@cygwin.com Cc: Jon TURNEY <jon.turney@dronecode.org.uk> Subject: [PATCH 1/2] Cygwin/X: Improve choice of display name used by internal clients Date: Thu, 01 Oct 2009 12:12:00 -0000 [thread overview] Message-ID: <1254399169-2412-2-git-send-email-jon.turney@dronecode.org.uk> (raw) In-Reply-To: <1254399169-2412-1-git-send-email-jon.turney@dronecode.org.uk> Choose display name used to connect internal clients and exported into environment of processes started by traymenu so that it uses a transport we know is working This should mean the server can start correctly with -multiwindow and/or -clipboard and any two of -nolisten inet6 -nolisten inet and -nolisten unix (the server will correctly refuse to start if all 3 are used, as it must be listening on at least one socket) Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk> --- hw/xwin/Makefile.am | 1 + hw/xwin/win.h | 7 +++++ hw/xwin/winclipboardthread.c | 5 +--- hw/xwin/windisplay.c | 55 ++++++++++++++++++++++++++++++++++++++++++ hw/xwin/winmultiwindowwm.c | 10 +------ hw/xwin/winprefs.c | 11 ++------ include/os.h | 2 + os/connection.c | 17 +++++++++++++ 8 files changed, 88 insertions(+), 20 deletions(-) create mode 100644 hw/xwin/windisplay.c diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am index 2c7972a..70f8aa5 100644 --- a/hw/xwin/Makefile.am +++ b/hw/xwin/Makefile.am @@ -120,6 +120,7 @@ SRCS = InitInput.c \ winpriv.h \ winresource.h \ winwindow.h \ + windisplay.c \ XWin.rc \ $(top_srcdir)/Xext/dpmsstubs.c \ $(top_srcdir)/Xi/stubs.c \ diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 9009df2..b76ac87 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -1454,6 +1454,13 @@ Bool winInitCursor (ScreenPtr pScreen); /* + * windisplay.c + */ + +void +winGetDisplayName(char *szDisplay, unsigned int screen); + +/* * END DDX and DIX Function Prototypes */ diff --git a/hw/xwin/winclipboardthread.c b/hw/xwin/winclipboardthread.c index 8eb825f..fefd408 100644 --- a/hw/xwin/winclipboardthread.c +++ b/hw/xwin/winclipboardthread.c @@ -177,10 +177,7 @@ winClipboardProc (void *pvNotUsed) * for all screens on the display. That is why there is only * one clipboard client thread. */ - snprintf (szDisplay, - 512, - "127.0.0.1:%s.0", - display); + winGetDisplayName(szDisplay, 0); /* Print the display connection string */ ErrorF ("winClipboardProc - DISPLAY=%s\n", szDisplay); diff --git a/hw/xwin/windisplay.c b/hw/xwin/windisplay.c new file mode 100644 index 0000000..3561aa0 --- /dev/null +++ b/hw/xwin/windisplay.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) Jon TURNEY 2009 + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#include <opaque.h> // for display +#include "win.h" + +/* + Generate a display name string referring to the display of this server, + using a transport we know is enabled +*/ + +void +winGetDisplayName(char *szDisplay, unsigned int screen) +{ + if (TransIsListening("local")) + { + snprintf(szDisplay, 512, ":%s.%d", display, screen); + } + else if (TransIsListening("inet")) + { + snprintf(szDisplay, 512, "127.0.0.1:%s.%d", display, screen); + } + else if (TransIsListening("inet6")) + { + snprintf(szDisplay, 512, "::1:%s.%d", display, screen); + } + else + { + // this can't happen! + snprintf(szDisplay, 512, "localhost:%s.%d", display, screen); + } + + ErrorF ("winGetDisplay: DISPLAY=%s\n", szDisplay); +} diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index 18d9aed..0de607d 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -137,7 +137,6 @@ typedef struct _XMsgProcArgRec { * References to external symbols */ -extern char *display; extern void ErrorF (const char* /*f*/, ...); @@ -938,8 +937,7 @@ winMultiWindowXMsgProc (void *pArg) XSetIOErrorHandler (winMultiWindowXMsgProcIOErrorHandler); /* Setup the display connection string x */ - snprintf (pszDisplay, - 512, "127.0.0.1:%s.%d", display, (int)pProcArg->dwScreen); + winGetDisplayName(pszDisplay, (int)pProcArg->dwScreen); /* Print the display connection string */ ErrorF ("winMultiWindowXMsgProc - DISPLAY=%s\n", pszDisplay); @@ -1266,11 +1264,7 @@ winInitMultiWindowWM (WMInfoPtr pWMInfo, WMProcArgPtr pProcArg) XSetIOErrorHandler (winMultiWindowWMIOErrorHandler); /* Setup the display connection string x */ - snprintf (pszDisplay, - 512, - "127.0.0.1:%s.%d", - display, - (int) pProcArg->dwScreen); + winGetDisplayName(pszDisplay, (int)pProcArg->dwScreen); /* Print the display connection string */ ErrorF ("winInitMultiWindowWM - DISPLAY=%s\n", pszDisplay); diff --git a/hw/xwin/winprefs.c b/hw/xwin/winprefs.c index d5bceb9..d854d2e 100644 --- a/hw/xwin/winprefs.c +++ b/hw/xwin/winprefs.c @@ -69,10 +69,6 @@ extern HICON g_hSmallIconX; /* Currently in use command ID, incremented each new menu item created */ static int g_cmdid = STARTMENUID; - -/* Defined in DIX */ -extern char *display; - /* Local function to handle comma-ified icon names */ static HICON LoadImageComma (char *fname, int sx, int sy, int flags); @@ -780,16 +776,15 @@ LoadPreferences (void) /* Setup a DISPLAY environment variable, need to allocate on heap */ /* because putenv doesn't copy the argument... */ - snprintf (szDisplay, 512, "DISPLAY=127.0.0.1:%s.0", display); - szEnvDisplay = (char *)(malloc (strlen(szDisplay)+1)); + winGetDisplayName(szDisplay, 0); + szEnvDisplay = (char *)(malloc(strlen(szDisplay)+strlen("DISPLAY=")+1)); if (szEnvDisplay) { - strcpy (szEnvDisplay, szDisplay); + snprintf(szEnvDisplay, 512, "DISPLAY=%s", szDisplay); putenv (szEnvDisplay); } /* Replace any "%display%" in menu commands with display string */ - snprintf (szDisplay, 512, "127.0.0.1:%s.0", display); for (i=0; i<pref.menuItems; i++) { for (j=0; j<pref.menu[i].menuItems; j++) diff --git a/include/os.h b/include/os.h index 2f6b0c0..174ffd3 100644 --- a/include/os.h +++ b/include/os.h @@ -110,6 +110,8 @@ extern _X_EXPORT int WriteToClient(ClientPtr /*who*/, int /*count*/, const void* extern _X_EXPORT void ResetOsBuffers(void); +extern _X_EXPORT int TransIsListening(char *protocol); + extern _X_EXPORT void InitConnectionLimits(void); extern _X_EXPORT void NotifyParentProcess(void); diff --git a/os/connection.c b/os/connection.c index 3ff93bb..5ea55ae 100644 --- a/os/connection.c +++ b/os/connection.c @@ -270,6 +270,23 @@ lookup_trans_conn (int fd) return (NULL); } +int +TransIsListening(char *protocol) +{ + /* look for this transport in the list of listeners */ + int i; + for (i = 0; i < ListenTransCount; i++) + { + if (!strcmp(protocol, ListenTransConns[i]->transptr->TransName)) + { + return 1; + } + } + + return 0; +} + + /* Set MaxClients and lastfdesc, and allocate ConnectionTranslation */ void -- 1.6.4.2 -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://x.cygwin.com/docs/ FAQ: http://x.cygwin.com/docs/faq/
next prev parent reply other threads:[~2009-10-01 12:12 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-10-01 12:12 [PATCH 0/2] Patches to improve some edge cases in internal client connections Jon TURNEY 2009-10-01 12:12 ` Jon TURNEY [this message] 2009-10-01 12:12 ` [PATCH 2/2] Cygwin/X: Cause the X server to terminate if clipboard or WM internal client threads exit due to an error Jon TURNEY 2009-10-07 2:16 ` [PATCH 1/2] Cygwin/X: Improve choice of display name used by internal clients Yaakov (Cygwin/X) 2009-10-11 19:13 ` Jon TURNEY
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1254399169-2412-2-git-send-email-jon.turney@dronecode.org.uk \ --to=jon.turney@dronecode.org.uk \ --cc=cygwin-xfree@cygwin.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).