--=-F5C7zNu/PdrKnUxQz53a Content-Type: text/plain Content-Transfer-Encoding: 7bit Hi, (this mail was already send to Keith before I discovered fontconfig mailing list :)) I've found a crasher in fontconfig when HOME variable is not set (it can be the case when using usermode to get root access).. I have done a patch which fixes this case and only rely on HOME variable presence when getpwuid doesn't give any info.. -- Frederic Crozat <fcrozat@xxxxxxxxxxxxxxxx> MandrakeSoft --=-F5C7zNu/PdrKnUxQz53a Content-Disposition: inline; filename=fontconfig-2.1-gethome.patch Content-Type: text/x-diff; name=fontconfig-2.1-gethome.patch; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit --- fontconfig/src/fcstr.c.gethome 2002-09-01 00:17:32.000000000 +0200 +++ fontconfig/src/fcstr.c 2003-01-08 18:26:11.000000000 +0100 @@ -25,6 +25,7 @@ #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <pwd.h> #include "fcint.h" FcChar8 * @@ -421,16 +422,38 @@ } FcChar8 * +FcStrGetHome (void) +{ + static FcChar8 * home; + + if (!home) + { + struct passwd *pw; + pw = getpwuid(getuid()); + if (pw) + { + home = FcStrCopy (pw->pw_dir); + } + else { + /* fallback on $HOME */ + home = (FcChar8 *) getenv ("HOME"); + } + } + return FcStrCopy (home); +} + +FcChar8 * FcStrCopyFilename (const FcChar8 *s) { FcChar8 *new; if (*s == '~') { - FcChar8 *home = (FcChar8 *) getenv ("HOME"); - int size = strlen ((char *) home) + strlen ((char *) s); + FcChar8 *home = FcStrGetHome (); + int size; if (!home) return 0; + size = strlen ((char *) home) + strlen ((char *) s); new = (FcChar8 *) malloc (size); if (!new) return 0; @@ -632,6 +655,7 @@ return list->set->strs[list->n++]; } + void FcStrListDone (FcStrList *list) { --- fontconfig/src/fccfg.c.gethome 2002-09-01 00:17:32.000000000 +0200 +++ fontconfig/src/fccfg.c 2003-01-08 18:22:58.000000000 +0100 @@ -1367,7 +1367,7 @@ file = 0; switch (*url) { case '~': - dir = (FcChar8 *) getenv ("HOME"); + dir = (FcChar8 *) FcStrGetHome(); if (dir) file = FcConfigFileExists (dir, url + 1); else --=-F5C7zNu/PdrKnUxQz53a--