Index: configure.in =================================================================== --- configure.in.orig +++ configure.in @@ -57,7 +57,9 @@ dnl ==================================== AC_CONFIG_HEADERS(config.h) -AC_PROG_CC +AC_PROG_CC_STDC +AC_USE_SYSTEM_EXTENSIONS +AC_SYS_LARGEFILE AC_PROG_INSTALL AC_PROG_LN_S AC_LIBTOOL_WIN32_DLL @@ -119,7 +121,7 @@ AC_TYPE_PID_T # Checks for library functions. AC_FUNC_VPRINTF AC_FUNC_MMAP -AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r]) +AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp mkostemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48 random_r rand_r]) # # Checks for iconv Index: src/fcatomic.c =================================================================== --- src/fcatomic.c.orig +++ src/fcatomic.c @@ -107,10 +107,14 @@ FcAtomicLock (FcAtomic *atomic) #ifdef HAVE_LINK strcpy ((char *) atomic->tmp, (char *) atomic->file); strcat ((char *) atomic->tmp, TMP_NAME); +#ifdef HAVE_MKOSTEMP + fd = mkostemp ((char *) atomic->tmp, O_CLOEXEC); +#else fd = mkstemp ((char *) atomic->tmp); +#endif if (fd < 0) return FcFalse; - f = fdopen (fd, "w"); + f = fdopen (fd, "we"); if (!f) { close (fd); Index: src/fccache.c =================================================================== --- src/fccache.c.orig +++ src/fccache.c @@ -216,7 +216,7 @@ FcDirCacheOpenFile (const FcChar8 *cache if (FcStat (cache_file, file_stat) < 0) return -1; #endif - fd = open((char *) cache_file, O_RDONLY | O_BINARY); + fd = open((char *) cache_file, O_RDONLY | O_BINARY | O_CLOEXEC); if (fd < 0) return fd; #ifndef _WIN32 @@ -963,7 +963,7 @@ FcDirCacheWrite (FcCache *cache, FcConfi if (!FcAtomicLock (atomic)) goto bail3; - fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666); + fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY | O_CLOEXEC, 0666); if (fd == -1) goto bail4;