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