diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2017-11-20 10:47:10 +0100 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2017-11-20 10:47:10 +0100 |
commit | 3b640a0f8de615e53dd6801ebd2aa0cf04f76c69 (patch) | |
tree | 925afe265c0f0a5a36b215e5bf68e6fe1c2e3bdf /nx-X11/programs/Xserver | |
parent | 39d45a0e8ff58a649e5c8e403f89e3b14ad1c9d2 (diff) | |
parent | 4ef4fbf16eca01b40176a830bfa6a8ada95e357b (diff) | |
download | nx-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
Diffstat (limited to 'nx-X11/programs/Xserver')
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Args.c | 112 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Args.h | 1 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Reconnect.c | 4 |
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) { |