src/Makefile.am | 5 +- src/fccache.c | 57 --------------------------- src/fccompat.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/fcint.h | 3 + 4 files changed, 122 insertions(+), 59 deletions(-) New commits: commit 000ca9ccb03013a5b151f0d21148ab0ca4c2f2de Author: Akira TAGOH <akira@xxxxxxxxx> Date: Tue Jan 22 12:11:56 2013 +0900 Fix installation on MinGW32 Patch from LRN diff --git a/src/Makefile.am b/src/Makefile.am index dba4206..3bb90ea 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -31,8 +31,9 @@ fontconfig_def_dependency = fontconfig.def # gcc import library install/uninstall -install-libtool-import-lib: - $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir) +install-libtool-import-lib: libfontconfig.la + $(MKDIR_P) $(DESTDIR)$(libdir) + $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)/libfontconfig.dll.a $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def uninstall-libtool-import-lib: commit 6363193a0575cf6f58baf7f0a772ad8f92b7b904 Author: Akira TAGOH <akira@xxxxxxxxx> Date: Tue Jan 22 12:03:28 2013 +0900 Fix mkstemp absence for some platform Patch from LRN and modified to make more generic. diff --git a/src/fccache.c b/src/fccache.c index 610b8f0..2c63125 100644 --- a/src/fccache.c +++ b/src/fccache.c @@ -31,7 +31,6 @@ #include <dirent.h> #include <string.h> #include <sys/types.h> -#include <time.h> #include <assert.h> #if defined(HAVE_MMAP) || defined(__CYGWIN__) # include <unistd.h> @@ -253,62 +252,6 @@ static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL]; static int fcCacheMaxLevel; -static int32_t -FcRandom(void) -{ - int32_t result; - -#if HAVE_RANDOM_R - static struct random_data fcrandbuf; - static char statebuf[256]; - static FcBool initialized = FcFalse; - - if (initialized != FcTrue) - { - initstate_r(time(NULL), statebuf, 256, &fcrandbuf); - initialized = FcTrue; - } - - random_r(&fcrandbuf, &result); -#elif HAVE_RANDOM - static char statebuf[256]; - char *state; - static FcBool initialized = FcFalse; - - if (initialized != FcTrue) - { - state = initstate(time(NULL), statebuf, 256); - initialized = FcTrue; - } - else - state = setstate(statebuf); - - result = random(); - - setstate(state); -#elif HAVE_LRAND48 - result = lrand48(); -#elif HAVE_RAND_R - static unsigned int seed = time(NULL); - - result = rand_r(&seed); -#elif HAVE_RAND - static FcBool initialized = FcFalse; - - if (initialized != FcTrue) - { - srand(time(NULL)); - initialized = FcTrue; - } - result = rand(); -#else -# error no random number generator function available. -#endif - - return result; -} - - static FcMutex *cache_lock; static void diff --git a/src/fccompat.c b/src/fccompat.c index 5ec2135..0a9c135 100644 --- a/src/fccompat.c +++ b/src/fccompat.c @@ -31,11 +31,20 @@ #include "fcint.h" +#include <errno.h> +#if HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#if HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif #if HAVE_FCNTL_H #include <fcntl.h> #endif #include <stdarg.h> #include <stdlib.h> +#include <string.h> +#include <time.h> #ifdef O_CLOEXEC #define FC_O_CLOEXEC O_CLOEXEC @@ -47,6 +56,58 @@ #else #define FC_O_LARGEFILE 0 #endif +#ifdef O_BINARY +#define FC_O_BINARY O_BINARY +#else +#define FC_O_BINARY 0 +#endif +#ifdef O_TEMPORARY +#define FC_O_TEMPORARY O_TEMPORARY +#else +#define FC_O_TEMPORARY 0 +#endif +#ifdef O_NOINHERIT +#define FC_O_NOINHERIT O_NOINHERIT +#else +#define FC_O_NOINHERIT 0 +#endif + +#if !defined (HAVE_MKOSTEMP) && !defined(HAVE_MKSTEMP) && !defined(HAVE__MKTEMP_S) +static int +mkstemp (char *template) +{ + static const char s[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int fd, i; + size_t l; + + if (template == NULL) + { + errno = EINVAL; + return -1; + } + l = strlen (template); + if (l < 6 || strcmp (&template[l - 6], "XXXXXX") != 0) + { + errno = EINVAL; + return -1; + } + do + { + errno = 0; + for (i = l - 6; i < l; i++) + { + int r = FcRandom (); + template[i] = s[r % 62]; + } + fd = FcOpen (template, FC_O_BINARY | O_CREAT | O_EXCL | FC_O_TEMPORARY | FC_O_NOINHERIT | O_RDWR, 0600); + } while (fd < 0 && errno == EEXIST); + if (fd >= 0) + errno = 0; + + return fd; +} +#define HAVE_MKSTEMP 1 +#endif int FcOpen(const char *pathname, int flags, ...) @@ -109,3 +170,58 @@ FcMakeTempfile (char *template) return fd; } + +int32_t +FcRandom(void) +{ + int32_t result; + +#if HAVE_RANDOM_R + static struct random_data fcrandbuf; + static char statebuf[256]; + static FcBool initialized = FcFalse; + + if (initialized != FcTrue) + { + initstate_r(time(NULL), statebuf, 256, &fcrandbuf); + initialized = FcTrue; + } + + random_r(&fcrandbuf, &result); +#elif HAVE_RANDOM + static char statebuf[256]; + char *state; + static FcBool initialized = FcFalse; + + if (initialized != FcTrue) + { + state = initstate(time(NULL), statebuf, 256); + initialized = FcTrue; + } + else + state = setstate(statebuf); + + result = random(); + + setstate(state); +#elif HAVE_LRAND48 + result = lrand48(); +#elif HAVE_RAND_R + static unsigned int seed = time(NULL); + + result = rand_r(&seed); +#elif HAVE_RAND + static FcBool initialized = FcFalse; + + if (initialized != FcTrue) + { + srand(time(NULL)); + initialized = FcTrue; + } + result = rand(); +#else +# error no random number generator function available. +#endif + + return result; +} diff --git a/src/fcint.h b/src/fcint.h index 3cf526f..71b7341 100644 --- a/src/fcint.h +++ b/src/fcint.h @@ -724,6 +724,9 @@ FcOpen(const char *pathname, int flags, ...); FcPrivate int FcMakeTempfile (char *template); +FcPrivate int32_t +FcRandom (void); + /* fcdbg.c */ FcPrivate void _______________________________________________ Fontconfig mailing list Fontconfig@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/fontconfig