aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2017-11-20 10:47:10 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2017-11-20 10:47:10 +0100
commit3b640a0f8de615e53dd6801ebd2aa0cf04f76c69 (patch)
tree925afe265c0f0a5a36b215e5bf68e6fe1c2e3bdf
parent39d45a0e8ff58a649e5c8e403f89e3b14ad1c9d2 (diff)
parent4ef4fbf16eca01b40176a830bfa6a8ada95e357b (diff)
downloadnx-libs-3b640a0f8de615e53dd6801ebd2aa0cf04f76c69.tar.gz
nx-libs-3b640a0f8de615e53dd6801ebd2aa0cf04f76c69.tar.bz2
nx-libs-3b640a0f8de615e53dd6801ebd2aa0cf04f76c69.zip
Merge branch 'uli42-pr/options_on_reconnect' into 3.6.x
Attributes GH PR #554: https://github.com/ArcticaProject/nx-libs/pull/554
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.c112
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.h1
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Reconnect.c4
3 files changed, 60 insertions, 57 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index e4fa350bc..2b8d44388 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -135,7 +135,7 @@ char nxagentShadowDisplayName[1024] = {0};
char nxagentWindowName[256];
char nxagentDialogName[256];
char nxagentSessionId[256] = {0};
-char *nxagentOptionsFilename;
+char *nxagentOptionsFilenameOrString;
Bool nxagentFullGeneration = False;
int nxagentDefaultClass = TrueColor;
@@ -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 (nxagentOptionsFilename)
+ if (nxagentOptionsFilenameOrString)
{
- nxagentOptionsFilename = (char *) realloc(nxagentOptionsFilename, strlen(argv[j + 1]) + 1);
+ nxagentOptionsFilenameOrString = (char *) realloc(nxagentOptionsFilenameOrString, strlen(argv[j + 1]) + 1);
}
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
else
@@ -283,25 +283,7 @@ int ddxProcessArgument(int argc, char *argv[], int i)
}
}
- if (nxagentOptionsFilename)
- {
- /* 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);
- }
- }
+ nxagentProcessOptions(nxagentOptionsFilenameOrString);
}
if (!strcmp(argv[i], "-B"))
@@ -380,23 +362,19 @@ int ddxProcessArgument(int argc, char *argv[], int i)
{
int size;
- if (nxagentOptionsFilename != NULL)
- {
- free(nxagentOptionsFilename);
-
- nxagentOptionsFilename = NULL;
- }
+ free(nxagentOptionsFilenameOrString);
+ nxagentOptionsFilenameOrString = NULL;
if ((size = strlen(argv[i])) < 1024)
{
- if ((nxagentOptionsFilename = malloc(size + 1)) == NULL)
+ if ((nxagentOptionsFilenameOrString = malloc(size + 1)) == NULL)
{
FatalError("malloc failed");
}
- strncpy(nxagentOptionsFilename, argv[i], size);
+ strncpy(nxagentOptionsFilenameOrString, argv[i], size);
- nxagentOptionsFilename[size] = '\0';
+ nxagentOptionsFilenameOrString[size] = '\0';
}
else
{
@@ -1584,10 +1562,38 @@ 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)
{
- FILE *file;
- char *data;
+ FILE *file = NULL;
+ char *data = NULL;
int offset;
int size;
@@ -1597,7 +1603,7 @@ void nxagentProcessOptionsFile(char * filename)
#ifdef DEBUG
fprintf(stderr, "nxagentProcessOptionsFile: Going to process option file [%s].\n",
- validateString(filename);
+ validateString(filename));
#endif
/*
@@ -1623,7 +1629,7 @@ void nxagentProcessOptionsFile(char * filename)
fprintf(stderr, "Warning: Couldn't position inside option file '%s'. Error is '%s'.\n",
validateString(filename), strerror(errno));
- goto nxagentProcessOptionsFileClose;
+ goto nxagentProcessOptionsFileExit;
}
if ((sizeOfFile = ftell(file)) == -1)
@@ -1631,7 +1637,7 @@ void nxagentProcessOptionsFile(char * filename)
fprintf(stderr, "Warning: Couldn't get the size of option file '%s'. Error is '%s'.\n",
validateString(filename), strerror(errno));
- goto nxagentProcessOptionsFileClose;
+ goto nxagentProcessOptionsFileExit;
}
#ifdef DEBUG
@@ -1646,7 +1652,7 @@ void nxagentProcessOptionsFile(char * filename)
fprintf(stderr, "Warning: Maximum file size exceeded for options '%s'.\n",
validateString(filename));
- goto nxagentProcessOptionsFileClose;
+ goto nxagentProcessOptionsFileExit;
}
if ((data = malloc(sizeOfFile + 1)) == NULL)
@@ -1654,7 +1660,7 @@ void nxagentProcessOptionsFile(char * filename)
fprintf(stderr, "Warning: Memory allocation failed processing file '%s'.\n",
validateString(filename));
- goto nxagentProcessOptionsFileClose;
+ goto nxagentProcessOptionsFileExit;
}
offset = 0;
@@ -1669,7 +1675,7 @@ void nxagentProcessOptionsFile(char * filename)
fprintf(stderr, "Warning: Error reading the option file '%s'.\n",
validateString(filename));
- goto nxagentProcessOptionsFileFree;
+ goto nxagentProcessOptionsFileExit;
}
size += result;
@@ -1686,7 +1692,7 @@ void nxagentProcessOptionsFile(char * filename)
fprintf(stderr, "Warning: Premature end of option file '%s' while reading.\n",
validateString(filename));
- goto nxagentProcessOptionsFileFree;
+ goto nxagentProcessOptionsFileExit;
}
/*
@@ -1699,23 +1705,19 @@ void nxagentProcessOptionsFile(char * filename)
nxagentParseOptionString(data);
-nxagentProcessOptionsFileFree:
-
- if (data != NULL)
- {
- free(data);
- }
+nxagentProcessOptionsFileExit:
-nxagentProcessOptionsFileClose:
+ free(data);
- if (fclose(file) != 0)
+ if (file)
{
- fprintf(stderr, "Warning: Couldn't close option file '%s'. Error is '%s'.\n",
- validateString(filename), strerror(errno));
+ if (fclose(file) != 0)
+ {
+ fprintf(stderr, "Warning: Couldn't close option file '%s'. Error is '%s'.\n",
+ validateString(filename), strerror(errno));
+ }
}
-nxagentProcessOptionsFileExit:
-
return;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.h b/nx-X11/programs/Xserver/hw/nxagent/Args.h
index 4c736ea9f..d60488c0d 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.h
@@ -81,6 +81,7 @@ extern Bool nxagentIpaq;
extern int nxagentLockDeferLevel;
Bool nxagentPostProcessArgs(char *name, Display *dpy, Screen *scr);
+void nxagentProcessOptions(char * string);
void nxagentProcessOptionsFile(char * filename);
void nxagentSetPackMethod(void);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
index 902fe36be..cae0a397b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
@@ -103,7 +103,7 @@ extern Bool nxagentRenderEnable;
extern char *nxagentKeyboard;
-extern char *nxagentOptionsFilename;
+extern char *nxagentOptionsFilenameOrString;
enum SESSION_STATE nxagentSessionState = SESSION_STARTING;
@@ -456,7 +456,7 @@ Bool nxagentReconnectSession(void)
nxagentResetOptions();
- nxagentProcessOptionsFile(nxagentOptionsFilename);
+ nxagentProcessOptions(nxagentOptionsFilenameOrString);
if (nxagentReconnectDisplay(reconnectLossyLevel[DISPLAY_STEP]) == 0)
{