aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChong Yidong2008-06-16 14:35:24 +0000
committerChong Yidong2008-06-16 14:35:24 +0000
commit77989187bfa399f1300260893767ee6ed91e02d6 (patch)
tree53430335382a46e1522ab7d2e5827210b0161e85 /src
parentd756bcd0476d1a538681bd6d4839cb7ded9b86e9 (diff)
downloademacs-77989187bfa399f1300260893767ee6ed91e02d6.tar.gz
emacs-77989187bfa399f1300260893767ee6ed91e02d6.zip
(font_parse_fcname): Fix handling of unknown-spec string.
Diffstat (limited to 'src')
-rw-r--r--src/font.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/font.c b/src/font.c
index 5ee4d3a7e80..420548171e5 100644
--- a/src/font.c
+++ b/src/font.c
@@ -1407,9 +1407,9 @@ font_parse_fcname (name, font)
1407 /* Now parse ":KEY=VAL" patterns. Store known keys and values in 1407 /* Now parse ":KEY=VAL" patterns. Store known keys and values in
1408 extra, copy unknown ones to COPY. It is stored in extra slot by 1408 extra, copy unknown ones to COPY. It is stored in extra slot by
1409 the key QCfc_unknown_spec. */ 1409 the key QCfc_unknown_spec. */
1410 char *copy; 1410 char *copy_start, *copy;
1411 1411
1412 name = copy = alloca (name + len - props_beg); 1412 copy_start = copy = alloca (name + len - props_beg);
1413 if (! copy) 1413 if (! copy)
1414 return -1; 1414 return -1;
1415 1415
@@ -1467,10 +1467,11 @@ font_parse_fcname (name, font)
1467 key = font_intern_prop (p, q - p, 1); 1467 key = font_intern_prop (p, q - p, 1);
1468 prop = get_font_prop_index (key); 1468 prop = get_font_prop_index (key);
1469 } 1469 }
1470
1470 p = q + 1; 1471 p = q + 1;
1471 for (q = p; *q && *q != ':'; q++); 1472 for (q = p; *q && *q != ':'; q++);
1472
1473 val = font_intern_prop (p, q - p, 0); 1473 val = font_intern_prop (p, q - p, 0);
1474
1474 if (! NILP (val)) 1475 if (! NILP (val))
1475 { 1476 {
1476 if (prop >= FONT_FOUNDRY_INDEX 1477 if (prop >= FONT_FOUNDRY_INDEX
@@ -1480,15 +1481,19 @@ font_parse_fcname (name, font)
1480 else if (prop >= 0) 1481 else if (prop >= 0)
1481 Ffont_put (font, key, val); 1482 Ffont_put (font, key, val);
1482 else 1483 else
1483 bcopy (keyhead, copy, q - keyhead); 1484 {
1484 copy += q - keyhead; 1485 if (copy_start != copy)
1486 *copy++ = ':';
1487 bcopy (keyhead, copy, q - keyhead);
1488 copy += q - keyhead;
1489 }
1485 } 1490 }
1486 } 1491 }
1487 p = *q ? q + 1 : q; 1492 p = *q ? q + 1 : q;
1488 } 1493 }
1489 if (name != copy) 1494 if (copy_start != copy)
1490 font_put_extra (font, QCfc_unknown_spec, 1495 font_put_extra (font, QCfc_unknown_spec,
1491 make_unibyte_string (name, copy - name)); 1496 make_unibyte_string (copy_start, copy - copy_start));
1492 } 1497 }
1493 } 1498 }
1494 else 1499 else