From 3c9ee1ff7bc78d91b28eb52f8d15b4f3bf514be1 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Wed, 8 May 2019 23:21:30 +0200 Subject: nxagent: Determine nxagentProgName only once also add TEST prints, init nxagentProgName with NULL and add const where it was missing. Fixes ArcticaProject/nx-libs#803 --- nx-X11/programs/Xserver/hw/nxagent/Args.c | 28 +++++++++++++++++++++------- nx-X11/programs/Xserver/hw/nxagent/Init.c | 7 ++++++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c index 949892f25..607dab9bf 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Args.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c @@ -126,7 +126,7 @@ extern int _XGetBitsPerPixel(Display *dpy, int depth); extern char dispatchExceptionAtReset; -char *nxagentProgName; +const char *nxagentProgName = NULL; char nxagentDisplayName[NXAGENTDISPLAYNAMELENGTH]; Bool nxagentSynchronize = False; @@ -186,17 +186,31 @@ char *nxagentKeystrokeFile = NULL; int ddxProcessArgument(int argc, char *argv[], int i) { /* - * Ensure that the options are set to their defaults. + * The flavour can never change, so only set it once. + * + * FIXME: ddxProcessArgument() is called once for every command line + * argument, with argv[0] being the argument and not the program + * name! We should move this check somewhere else. */ + if (nxagentProgName == NULL) + { + char *basec = strdup(argv[0]); + nxagentProgName = strdup(basename(basec)); + free(basec); - char *basec = strdup(argv[0]); - nxagentProgName = strdup(basename(basec)); - free(basec); + /* + * Check if we are running as X2Go Agent + */ + checkX2goAgent(); + } + + #ifdef TEST + fprintf(stderr, "%s: argv[0] [%s] nxagentProgName [%s]\n", __func__, argv[0], nxagentProgName); + #endif /* - * Check if we running as X2Go Agent + * Ensure that the options are set to their defaults. */ - checkX2goAgent(); static Bool resetOptions = True; diff --git a/nx-X11/programs/Xserver/hw/nxagent/Init.c b/nx-X11/programs/Xserver/hw/nxagent/Init.c index d95c4b70f..d02af3f8d 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Init.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c @@ -194,7 +194,12 @@ int nxagentX2go; void checkX2goAgent(void) { - extern char *nxagentProgName; + extern const char *nxagentProgName; + + #ifdef TEST + fprintf(stderr, "%s: nxagentProgName [%s]\n", __func__, nxagentProgName); + #endif + if( strcasecmp(nxagentProgName,"x2goagent") == 0) { fprintf(stderr, "\nrunning as X2Go Agent\n"); -- cgit v1.2.3