[Fontconfig] fontconfig: Branch 'master'

Akira TAGOH tagoh at kemper.freedesktop.org
Mon May 28 00:00:14 PDT 2012


 src/fcatomic.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

New commits:
commit 26160366d7ba5c7baf20ae091d5dd0388714df83
Author: Akira TAGOH <akira at tagoh.org>
Date:   Mon May 28 15:58:56 2012 +0900

    fcatomic: fallback to create a directory with FcAtomicLock
    
    link(2) might be failed on the filesystem that doesn't support
    the hard link. e.g. FcAtomicLock() always fails on FAT filesystem
    when link(2) is available.
    So that may be a good idea to fallback if link(2) is failed.

diff --git a/src/fcatomic.c b/src/fcatomic.c
index 33c1cc6..4f6ab01 100644
--- a/src/fcatomic.c
+++ b/src/fcatomic.c
@@ -130,6 +130,13 @@ FcAtomicLock (FcAtomic *atomic)
 	return FcFalse;
     }
     ret = link ((char *) atomic->tmp, (char *) atomic->lck);
+    if (ret < 0 && errno == EPERM)
+    {
+	/* the filesystem where atomic->lck points to may not supports
+	 * the hard link. so better try to fallback
+	 */
+	ret = mkdir ((char *) atomic->lck, 0600);
+    }
     (void) unlink ((char *) atomic->tmp);
 #else
     ret = mkdir ((char *) atomic->lck, 0600);
@@ -195,7 +202,8 @@ void
 FcAtomicUnlock (FcAtomic *atomic)
 {
 #ifdef HAVE_LINK
-    unlink ((char *) atomic->lck);
+    if (unlink ((char *) atomic->lck) == -1)
+	rmdir ((char *) atomic->lck);
 #else
     rmdir ((char *) atomic->lck);
 #endif


More information about the Fontconfig mailing list