diff options
Diffstat (limited to 'fontconfig/src/fcdefault.c')
-rw-r--r-- | fontconfig/src/fcdefault.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/fontconfig/src/fcdefault.c b/fontconfig/src/fcdefault.c index aa47840d1..b1bd9cc1f 100644 --- a/fontconfig/src/fcdefault.c +++ b/fontconfig/src/fcdefault.c @@ -23,6 +23,7 @@ */ #include "fcint.h" +#include <limits.h> #include <string.h> /* MT-safe */ @@ -139,27 +140,38 @@ retry: prgname = FcStrdup (p); } +#elif defined (HAVE_GETPROGNAME) + const char *q = getprogname (); + if (q) + prgname = FcStrdup (q); + else + prgname = FcStrdup (""); #else - char buf[8192]; + char buf[PATH_MAX + 1]; unsigned int len; + char *p = NULL; len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1); if (len > 0) { - char *p; + buf[len] = '\0'; + p = buf; + } - p = strrchr (buf, '/'); - if (p) - p++; + if (p) + { + char *r = strrchr (p, '/'); + if (r) + r++; else - p = buf; + r = p; - prgname = FcStrdup (p); + prgname = FcStrdup (r); } -#endif if (!prgname) prgname = FcStrdup (""); +#endif if (!fc_atomic_ptr_cmpexch (&default_prgname, NULL, prgname)) { free (prgname); |