{ FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */
{ FC_DECORATIVE_OBJECT, FcFalse },
{ FC_SYMBOL_OBJECT, FcFalse },
+ { FC_VARIABLE_OBJECT, FcFalse },
};
#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0])
prgname = FcStrdup ("");
#else
# if defined (HAVE_GETEXECNAME)
- const char *p = getexecname ();
+ char *p = FcStrdup(getexecname ());
# elif defined (HAVE_READLINK)
- char buf[PATH_MAX + 1];
- int len;
+ size_t size = FC_PATH_MAX;
char *p = NULL;
- len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1);
- if (len != -1)
+ while (1)
{
- buf[len] = '\0';
- p = buf;
+ char *buf = malloc (size);
+ ssize_t len;
+
+ if (!buf)
+ break;
+
+ len = readlink ("/proc/self/exe", buf, size - 1);
+ if (len < 0)
+ {
+ free (buf);
+ break;
+ }
+ if (len < size - 1)
+ {
+ buf[len] = 0;
+ p = buf;
+ break;
+ }
+
+ free (buf);
+ size *= 2;
}
# else
char *p = NULL;
if (!prgname)
prgname = FcStrdup ("");
+
+ if (p)
+ free (p);
#endif
if (!fc_atomic_ptr_cmpexch (&default_prgname, NULL, prgname)) {
FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value);
if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch)
- size = 12.0L;
+ {
+ FcRange *r;
+ double b, e;
+ if (FcPatternObjectGetRange (pattern, FC_SIZE_OBJECT, 0, &r) == FcResultMatch && FcRangeGetDouble (r, &b, &e))
+ size = (b + e) * .5;
+ else
+ size = 12.0L;
+ }
if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch)
scale = 1.0;
if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch)