From 3642d71724e7c40f44753c1f2e6d8fb2c88a3e50 Mon Sep 17 00:00:00 2001 From: Akira TAGOH Date: Thu, 4 Jan 2018 20:23:16 +0900 Subject: [PATCH] Add FcReadLink to wrap up readlink impl. --- src/fccfg.c | 4 ++-- src/fccompat.c | 19 +++++++++++++++++++ src/fcint.h | 5 +++++ 3 files changed, 26 insertions(+), 2 deletions(-) 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 @@ FcConfigRealFilename (FcConfig *config, if (n) { - char buf[PATH_MAX]; + FcChar8 buf[PATH_MAX]; ssize_t len; if (sysroot) @@ -2227,7 +2227,7 @@ FcConfigRealFilename (FcConfig *config, 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 #endif +#if HAVE_UNISTD_H +#include +#endif #include #include #include @@ -256,6 +259,22 @@ FcMakeDirectory (const FcChar8 *dir) 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 @@ FcRandom (void); FcPrivate FcBool FcMakeDirectory (const FcChar8 *dir); +FcPrivate ssize_t +FcReadLink (const FcChar8 *pathname, + FcChar8 *buf, + size_t bufsiz); + /* fcdbg.c */ FcPrivate void