aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
diff options
context:
space:
mode:
authorUlrich Sibiller <uli42@gmx.de>2020-01-07 20:53:20 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-05-07 12:55:04 +0200
commitbed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28 (patch)
treebb3e7045b6c5d49d528dcadbf6e7ad2593d4d16b /nx-X11/programs/Xserver/hw/nxagent/Atoms.c
parent8a5c1d3d89e14959ad9aa74d24e3544b50ef37e5 (diff)
downloadnx-libs-bed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28.tar.gz
nx-libs-bed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28.tar.bz2
nx-libs-bed0d6ce2e3fac3bb85a8dae91ab6ef72e501e28.zip
Atoms.c: always duplicate strings before storing them in privAtomMap
Otherwise we will never be able to free the list because we do not know if free() is allowed or not.
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent/Atoms.c')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Atoms.c37
1 files changed, 11 insertions, 26 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
index b2d7cdc6f..761ab1b4f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
@@ -374,7 +374,7 @@ static unsigned int privAtomMapSize = 0;
static unsigned int privLastAtom = 0;
static void nxagentExpandCache(void);
-static void nxagentWriteAtom(Atom, XlibAtom, const char*, Bool);
+static void nxagentWriteAtom(Atom, XlibAtom, const char*);
static AtomMap* nxagentFindAtomByRemoteValue(XlibAtom);
static AtomMap* nxagentFindAtomByLocalValue(Atom);
static AtomMap* nxagentFindAtomByName(char*, unsigned);
@@ -396,31 +396,16 @@ static void nxagentExpandCache(void)
* consequent allocation, then cache the atom-couple.
*/
-static void nxagentWriteAtom(Atom local, XlibAtom remote, const char *string, Bool duplicate)
+static void nxagentWriteAtom(Atom local, XlibAtom remote, const char *string)
{
- const char *s;
+ const char *s = strdup(string);
- /*
- * We could remove this string duplication if we knew for sure that
- * the server will not reset, since only at reset the dix layer
- * frees all the atom names.
- */
-
- if (duplicate)
- {
- s = strdup(string);
-
- #ifdef WARNING
- if (s == NULL)
- {
- fprintf(stderr, "nxagentWriteAtom: Malloc failed.\n");
- }
- #endif
- }
- else
+ #ifdef WARNING
+ if (s == NULL)
{
- s = string;
+ fprintf(stderr, "nxagentWriteAtom: Malloc failed.\n");
}
+ #endif
if (privLastAtom == privAtomMapSize)
{
@@ -515,7 +500,7 @@ static int nxagentInitAtomMap(char **atomNameList, int count, Atom *atomsRet)
if (ValidAtom(local))
{
- nxagentWriteAtom(local, atom_list[i], name_list[i], False);
+ nxagentWriteAtom(local, atom_list[i], name_list[i]);
}
else
{
@@ -673,7 +658,7 @@ XlibAtom nxagentMakeAtom(char *string, unsigned int length, Bool Makeit)
}
else
{
- nxagentWriteAtom(local, remote, string, True);
+ nxagentWriteAtom(local, remote, string);
return remote;
}
@@ -732,7 +717,7 @@ XlibAtom nxagentLocalToRemoteAtom(Atom local)
return None;
}
- nxagentWriteAtom(local, remote, string, True);
+ nxagentWriteAtom(local, remote, string);
#ifdef TEST
fprintf(stderr, "%s: local [%d (%s)] -> remote [%d]\n", __func__, local, string, remote);
@@ -809,7 +794,7 @@ Atom nxagentRemoteToLocalAtom(XlibAtom remote)
local = None;
}
- nxagentWriteAtom(local, remote, string, True);
+ nxagentWriteAtom(local, remote, string);
#ifdef TEST
fprintf(stderr, "%s: remote [%d (%s)] -> local [%d]\n", __func__, remote, string, local);