parse_omit_name currently does not increase number of fields to 12 after
appending encoding, This does not lead to the correct font is a xlfd
like "-*-*-medium-r-*-*-33-*" is given.

Signed-off-by: Hong Xu <[email protected]>

---
Please note that the "if" in this patch is replaced by "while". The
reason is that I found the commit 3d69b0a83e62f8f6fbd changed the
"while" to "if", which does not seems logically correct for me and
actually accidently "fixed" the bug
http://sourceware.org/bugzilla/show_bug.cgi?id=10948
---
 modules/om/generic/omGeneric.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/modules/om/generic/omGeneric.c b/modules/om/generic/omGeneric.c
index a835f00d7989..f447eb30ef78 100644
--- a/modules/om/generic/omGeneric.c
+++ b/modules/om/generic/omGeneric.c
@@ -808,6 +808,20 @@ parse_omit_name(
        break;
     }
 
+    last++;
+
+    /* This may mot be needed anymore as XListFonts() takes care of this */
+    while (num_fields < 12) {
+       if ((last - buf) > (XLFD_MAX_LEN - 2))
+           return -1;
+       *last = '*';
+       *(last + 1) = '-';
+       num_fields++;
+       last+=2;
+       if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL)
+           return True;
+    }
+
    /* At this point, "last" is pointing to the last "-" in the
     * xlfd, and all xlfd's at this point take a form similar to:
     *       -*-*-*-*-*-*-14-*-*-*-*-*-
@@ -819,8 +833,6 @@ parse_omit_name(
     * we've found a match.
     */
 
-    last++;
-
     if ((last - buf) + strlen(font_data->name) > XLFD_MAX_LEN)
        return -1;
 
@@ -828,20 +840,6 @@ parse_omit_name(
     if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL)
        return True;
 
-    /* This may mot be needed anymore as XListFonts() takes care of this */
-    if (num_fields < 12) {
-       if ((last - buf) > (XLFD_MAX_LEN - 2))
-           return -1;
-       *last = '*';
-       *(last + 1) = '-';
-       strcpy(last + 2, font_data->name);
-       num_fields++;
-       last+=2;
-       if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL)
-           return True;
-    }
-
-
     return False;
 }
 
-- 
2.3.3


_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to