Call FT_Get_Advance() only as long as we need to determine font width type
diff --git a/src/fcfreetype.c b/src/fcfreetype.c
index 256ac95..f2e8a59 100644
--- a/src/fcfreetype.c
+++ b/src/fcfreetype.c
@@ -2077,7 +2077,7 @@
 {
     FcCharSet	    *fcs;
     int		    o;
-    FT_Pos	    advance, advances[3];
+    FT_Pos	    advances[3];
     unsigned int    num_advances = 0;
 
     fcs = FcCharSetCreate ();
@@ -2133,9 +2133,6 @@
 	    if (face->face_flags & FT_FACE_FLAG_SCALABLE)
 		load_flags |= FT_LOAD_NO_BITMAP;
 
-	    advance = 0;
-	    FT_Get_Advance (face, glyph, load_flags, &advance);
-
 	    /* CID fonts built by Adobe used to make ASCII control chars to cid1
 	     * (space glyph). As such, always check contour for those characters. */
 	    if (ucs4 <= 0x001F)
@@ -2148,14 +2145,18 @@
 
 	    if (good)
 	    {
-		if (num_advances < 3 && advance)
+		if (num_advances < 3)
 		{
-		    unsigned int i;
-		    for (i = 0; i < num_advances; i++)
-		      if (fc_approximately_equal (advance, advances[i]))
-		        break;
-		    if (i == num_advances)
-		      advances[num_advances++] = advance;
+		    FT_Pos advance = 0;
+		    if (!FT_Get_Advance (face, glyph, load_flags, &advance) && advance)
+		    {
+			unsigned int i;
+			for (i = 0; i < num_advances; i++)
+			  if (fc_approximately_equal (advance, advances[i]))
+			    break;
+			if (i == num_advances)
+			  advances[num_advances++] = advance;
+		    }
 		}
 
 		if ((ucs4 >> 8) != page)