aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.c12
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Error.c19
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Error.h3
3 files changed, 22 insertions, 12 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index 339c6d85b..0336be822 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -1296,7 +1296,17 @@ static void nxagentParseSingleOption(char *name, char *value)
}
else if (strcmp(name, "clients") == 0)
{
- snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s", value);
+ char *new = strdup(value);
+ if (new)
+ {
+ SAFE_free(nxagentClientsLogName);
+ nxagentClientsLogName = new;
+ }
+ else
+ {
+ fprintf(stderr, "Warning: Ignoring option [%s] because of memory problems\n",
+ validateString(name));
+ }
return;
}
else if (strcmp(name, "client") == 0)
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.c b/nx-X11/programs/Xserver/hw/nxagent/Error.c
index 21bc7fd02..a5d4426e9 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Error.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Error.c
@@ -79,7 +79,7 @@ static int nxagentClientsLog = -1;
* Clients log file name.
*/
-char nxagentClientsLogName[NXAGENTCLIENTSLOGNAMELENGTH] = { 0 };
+char *nxagentClientsLogName = NULL;
/*
* User's home.
@@ -250,12 +250,12 @@ int nxagentExitHandler(const char *message)
void nxagentOpenClientsLogFile(void)
{
- if (*nxagentClientsLogName == '\0')
+ if (!nxagentClientsLogName)
{
nxagentGetClientsPath();
}
- if (nxagentClientsLogName != NULL && *nxagentClientsLogName != '\0')
+ if (nxagentClientsLogName && *nxagentClientsLogName != '\0')
{
nxagentClientsLog = open(nxagentClientsLogName, O_RDWR | O_CREAT | O_APPEND, 0600);
@@ -553,7 +553,7 @@ char *nxagentGetSessionPath(void)
void nxagentGetClientsPath(void)
{
- if (*nxagentClientsLogName == '\0')
+ if (!nxagentClientsLogName)
{
char *sessionPath = nxagentGetSessionPath();
@@ -562,16 +562,17 @@ void nxagentGetClientsPath(void)
return;
}
- if (strlen(sessionPath) + strlen("/clients") > NXAGENTCLIENTSLOGNAMELENGTH - 1)
+ /* FIXME: this is currently never freed as it is thought to last
+ over the complete runtime. We should add a free call at shutdown
+ eventually... */
+ int len = asprintf(&nxagentClientsLogName, "%s/clients", sessionPath);
+ if (len == -1)
{
#ifdef PANIC
- fprintf(stderr, "nxagentGetClientsPath: PANIC! Invalid value for the NX clients Log File Path ''.\n");
+ fprintf(stderr, "%s: PANIC! Could not alloc NX clients Log File Path.\n", __func__);
#endif
-
return;
}
-
- snprintf(nxagentClientsLogName, NXAGENTCLIENTSLOGNAMELENGTH, "%s/clients", sessionPath);
}
return;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Error.h b/nx-X11/programs/Xserver/hw/nxagent/Error.h
index f23385e0a..9f5cfef74 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Error.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Error.h
@@ -30,8 +30,7 @@
* Clients log file name.
*/
-#define NXAGENTCLIENTSLOGNAMELENGTH 256
-extern char nxagentClientsLogName[NXAGENTCLIENTSLOGNAMELENGTH];
+extern char *nxagentClientsLogName;
extern char nxagentVerbose;