Index: xc/programs/Xserver/hw/xfree86/loader/loader.c =================================================================== RCS file: /cvs/XF4/xc/programs/Xserver/hw/xfree86/loader/loader.c,v retrieving revision 1.8 diff -u -r1.8 loader.c --- loader.c 3 Nov 2004 00:09:14 -0000 1.8 +++ loader.c 10 Aug 2005 16:01:18 -0000 @@ -779,7 +779,9 @@ AppendSymbol(symlist * list, const char *sym) { list->list = xnfrealloc(list->list, (list->num + 1) * sizeof(char **)); - list->list[list->num] = sym; + /* copy the symbol, since it comes from a module + that can be unloaded later */ + list->list[list->num] = xnfstrdup(sym); list->num++; } Index: xc/programs/Xserver/hw/xfree86/dummylib/xalloc.c =================================================================== RCS file: /cvs/XF4/xc/programs/Xserver/hw/xfree86/dummylib/xalloc.c,v retrieving revision 1.2 diff -u -r1.2 xalloc.c --- xalloc.c 3 Nov 2004 00:09:00 -0000 1.2 +++ xalloc.c 10 Aug 2005 19:55:30 -0000 @@ -90,3 +90,19 @@ strcpy(sd, s); return sd; } + +char * +XNFstrdup(const char *s) +{ + char *sd; + size_t len; + + if (s == NULL) + return NULL; + + len = strlen(s) + 1; + sd = (char *)XNFalloc(len); + strlcpy(sd, s, len); + return sd; +} +