diff options
| author | Chong Yidong | 2008-06-16 14:35:24 +0000 |
|---|---|---|
| committer | Chong Yidong | 2008-06-16 14:35:24 +0000 |
| commit | 77989187bfa399f1300260893767ee6ed91e02d6 (patch) | |
| tree | 53430335382a46e1522ab7d2e5827210b0161e85 /src | |
| parent | d756bcd0476d1a538681bd6d4839cb7ded9b86e9 (diff) | |
| download | emacs-77989187bfa399f1300260893767ee6ed91e02d6.tar.gz emacs-77989187bfa399f1300260893767ee6ed91e02d6.zip | |
(font_parse_fcname): Fix handling of unknown-spec string.
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.c | 19 |
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 |