Add FcReadLink to wrap up readlink impl.
diff --git a/src/fccfg.c b/src/fccfg.c
index a55bcef..2351ac2 100644
--- a/src/fccfg.c
+++ b/src/fccfg.c
@@ -2218,7 +2218,7 @@
 
     if (n)
     {
-	char buf[PATH_MAX];
+	FcChar8 buf[PATH_MAX];
 	ssize_t len;
 
 	if (sysroot)
@@ -2227,7 +2227,7 @@
 	    nn = FcStrdup (n);
 	FcStrFree (n);
 
-	if ((len = readlink ((const char *) nn, buf, sizeof (buf) - 1)) != -1)
+	if ((len = FcReadLink (nn, buf, sizeof (buf) - 1)) != -1)
 	{
 	    buf[len] = 0;
 	    FcStrFree (nn);
diff --git a/src/fccompat.c b/src/fccompat.c
index 31d80be..16f108d 100644
--- a/src/fccompat.c
+++ b/src/fccompat.c
@@ -37,6 +37,9 @@
 #if HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
@@ -256,6 +259,22 @@
     return ret;
 }
 
+ssize_t
+FcReadLink (const FcChar8 *pathname,
+	    FcChar8       *buf,
+	    size_t         bufsiz)
+{
+#ifdef HAVE_READLINK
+    return readlink ((const char *) pathname, (char *)buf, bufsiz);
+#else
+    /* XXX: this function is only used for FcConfigRealFilename() so far
+     * and returning -1 as an error still just works.
+     */
+    errno = ENOSYS;
+    return -1;
+#endif
+}
+
 #define __fccompat__
 #include "fcaliastail.h"
 #undef __fccompat__
diff --git a/src/fcint.h b/src/fcint.h
index 6185f5a..537023f 100644
--- a/src/fcint.h
+++ b/src/fcint.h
@@ -822,6 +822,11 @@
 FcPrivate FcBool
 FcMakeDirectory (const FcChar8 *dir);
 
+FcPrivate ssize_t
+FcReadLink (const FcChar8 *pathname,
+	    FcChar8       *buf,
+	    size_t         bufsiz);
+
 /* fcdbg.c */
 
 FcPrivate void