[Fontconfig] fontconfig: Branch 'master'
Akira TAGOH
tagoh at kemper.freedesktop.org
Wed Feb 25 21:09:49 PST 2015
configure.ac | 1 +
src/fcstat.c | 11 +++++++++--
2 files changed, 10 insertions(+), 2 deletions(-)
New commits:
commit 8809d1b73b9c162ee0fecd314e2a80b287309954
Author: Akira TAGOH <akira at tagoh.org>
Date: Thu Feb 26 14:08:20 2015 +0900
Copy the real size of struct dirent
In some platforms, d_name is defined as the flexible array member.
We may need to compute the real size for that case.
diff --git a/configure.ac b/configure.ac
index 1e704cd..9141d3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -680,6 +680,7 @@ dnl Figure out what cache format suffix to use for this architecture
AC_C_BIGENDIAN
AC_CHECK_SIZEOF([void *])
AC_CHECK_ALIGNOF([double])
+AC_CHECK_ALIGNOF([void *])
dnl include the header file for workaround of miscalculating size on autoconf
dnl particularly for fat binaries
diff --git a/src/fcstat.c b/src/fcstat.c
index 47b5884..d2eb258 100644
--- a/src/fcstat.c
+++ b/src/fcstat.c
@@ -215,8 +215,15 @@ FcScandir (const char *dirp,
{
if (!filter || (filter) (dent))
{
- p = (struct dirent *) malloc (sizeof (struct dirent));
- memcpy (p, dent, sizeof (struct dirent));
+ size_t dentlen = sizeof (struct dirent);
+
+ if (sizeof (struct dirent) == FcPtrToOffset (dent, dent->d_name))
+ {
+ dentlen += strlen (dent->d_name) + 1;
+ dentlen = ((dentlen + ALIGNOF_VOID_P - 1) & ~(ALIGNOF_VOID_P - 1));
+ }
+ p = (struct dirent *) malloc (dentlen);
+ memcpy (p, dent, dentlen);
if (n >= lsize)
{
lsize += 128;
More information about the Fontconfig
mailing list