[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