Commit 76ce623a authored by Ulrich Sibiller's avatar Ulrich Sibiller

Fix options parsing on reconnect

Commit 3f7b3001 was incomplete: the options parameter was not parsed as a string on reconnect. It was always assumed to be a filename.
parent 39d45a0e
...@@ -135,7 +135,7 @@ char nxagentShadowDisplayName[1024] = {0}; ...@@ -135,7 +135,7 @@ char nxagentShadowDisplayName[1024] = {0};
char nxagentWindowName[256]; char nxagentWindowName[256];
char nxagentDialogName[256]; char nxagentDialogName[256];
char nxagentSessionId[256] = {0}; char nxagentSessionId[256] = {0};
char *nxagentOptionsFilename; char *nxagentOptionsFilenameOrString;
Bool nxagentFullGeneration = False; Bool nxagentFullGeneration = False;
int nxagentDefaultClass = TrueColor; int nxagentDefaultClass = TrueColor;
...@@ -259,18 +259,18 @@ int ddxProcessArgument(int argc, char *argv[], int i) ...@@ -259,18 +259,18 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{ {
if ((!strcmp(argv[j], "-options") || !strcmp(argv[j], "-option")) && j + 1 < argc) if ((!strcmp(argv[j], "-options") || !strcmp(argv[j], "-option")) && j + 1 < argc)
{ {
if (nxagentOptionsFilename) if (nxagentOptionsFilenameOrString)
{ {
nxagentOptionsFilename = (char *) realloc(nxagentOptionsFilename, strlen(argv[j + 1]) + 1); nxagentOptionsFilenameOrString = (char *) realloc(nxagentOptionsFilenameOrString, strlen(argv[j + 1]) + 1);
} }
else else
{ {
nxagentOptionsFilename = (char *) malloc(strlen(argv[j + 1]) +1); nxagentOptionsFilenameOrString = (char *) malloc(strlen(argv[j + 1]) +1);
} }
if (nxagentOptionsFilename != NULL) if (nxagentOptionsFilenameOrString != NULL)
{ {
nxagentOptionsFilename = strcpy(nxagentOptionsFilename, argv[j + 1]); nxagentOptionsFilenameOrString = strcpy(nxagentOptionsFilenameOrString, argv[j + 1]);
} }
#ifdef WARNING #ifdef WARNING
else else
...@@ -283,25 +283,7 @@ int ddxProcessArgument(int argc, char *argv[], int i) ...@@ -283,25 +283,7 @@ int ddxProcessArgument(int argc, char *argv[], int i)
} }
} }
if (nxagentOptionsFilename) nxagentProcessOptions(nxagentOptionsFilenameOrString);
{
/* if the "filename" starts with an nx marker treat it
as an option _string_ instead of a filename */
if (strncasecmp(nxagentOptionsFilename, "nx/nx,", 6) == 0 ||
strncasecmp(nxagentOptionsFilename, "nx/nx:", 6) == 0)
{
nxagentParseOptionString(nxagentOptionsFilename + 6);
}
else if (strncasecmp(nxagentOptionsFilename, "nx,", 3) == 0 ||
strncasecmp(nxagentOptionsFilename, "nx:", 3) == 0)
{
nxagentParseOptionString(nxagentOptionsFilename + 3);
}
else
{
nxagentProcessOptionsFile(nxagentOptionsFilename);
}
}
} }
if (!strcmp(argv[i], "-B")) if (!strcmp(argv[i], "-B"))
...@@ -380,23 +362,19 @@ int ddxProcessArgument(int argc, char *argv[], int i) ...@@ -380,23 +362,19 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{ {
int size; int size;
if (nxagentOptionsFilename != NULL) free(nxagentOptionsFilenameOrString);
{ nxagentOptionsFilenameOrString = NULL;
free(nxagentOptionsFilename);
nxagentOptionsFilename = NULL;
}
if ((size = strlen(argv[i])) < 1024) if ((size = strlen(argv[i])) < 1024)
{ {
if ((nxagentOptionsFilename = malloc(size + 1)) == NULL) if ((nxagentOptionsFilenameOrString = malloc(size + 1)) == NULL)
{ {
FatalError("malloc failed"); FatalError("malloc failed");
} }
strncpy(nxagentOptionsFilename, argv[i], size); strncpy(nxagentOptionsFilenameOrString, argv[i], size);
nxagentOptionsFilename[size] = '\0'; nxagentOptionsFilenameOrString[size] = '\0';
} }
else else
{ {
...@@ -1584,6 +1562,34 @@ static void nxagentParseOptionString(char *string) ...@@ -1584,6 +1562,34 @@ static void nxagentParseOptionString(char *string)
} }
} }
void nxagentProcessOptions(char * string)
{
if (!string)
return;
#ifdef DEBUG
fprintf(stderr, "%s: Going to process option string/filename [%s].\n",
__func__, validateString(string));
#endif
/* if the "filename" starts with an nx marker treat it
as an option _string_ instead of a filename */
if (strncasecmp(string, "nx/nx,", 6) == 0 ||
strncasecmp(string, "nx/nx:", 6) == 0)
{
nxagentParseOptionString(string + 6);
}
else if (strncasecmp(string, "nx,", 3) == 0 ||
strncasecmp(string, "nx:", 3) == 0)
{
nxagentParseOptionString(string + 3);
}
else
{
nxagentProcessOptionsFile(string);
}
}
void nxagentProcessOptionsFile(char * filename) void nxagentProcessOptionsFile(char * filename)
{ {
FILE *file; FILE *file;
......
...@@ -81,6 +81,7 @@ extern Bool nxagentIpaq; ...@@ -81,6 +81,7 @@ extern Bool nxagentIpaq;
extern int nxagentLockDeferLevel; extern int nxagentLockDeferLevel;
Bool nxagentPostProcessArgs(char *name, Display *dpy, Screen *scr); Bool nxagentPostProcessArgs(char *name, Display *dpy, Screen *scr);
void nxagentProcessOptions(char * string);
void nxagentProcessOptionsFile(char * filename); void nxagentProcessOptionsFile(char * filename);
void nxagentSetPackMethod(void); void nxagentSetPackMethod(void);
......
...@@ -103,7 +103,7 @@ extern Bool nxagentRenderEnable; ...@@ -103,7 +103,7 @@ extern Bool nxagentRenderEnable;
extern char *nxagentKeyboard; extern char *nxagentKeyboard;
extern char *nxagentOptionsFilename; extern char *nxagentOptionsFilenameOrString;
enum SESSION_STATE nxagentSessionState = SESSION_STARTING; enum SESSION_STATE nxagentSessionState = SESSION_STARTING;
...@@ -456,7 +456,7 @@ Bool nxagentReconnectSession(void) ...@@ -456,7 +456,7 @@ Bool nxagentReconnectSession(void)
nxagentResetOptions(); nxagentResetOptions();
nxagentProcessOptionsFile(nxagentOptionsFilename); nxagentProcessOptions(nxagentOptionsFilenameOrString);
if (nxagentReconnectDisplay(reconnectLossyLevel[DISPLAY_STEP]) == 0) if (nxagentReconnectDisplay(reconnectLossyLevel[DISPLAY_STEP]) == 0)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment