diff options
author | Thomas Adam <thomas@xteddy.org> | 2022-06-27 12:01:09 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2022-06-27 12:01:09 +0100 |
commit | d8c527a5f9fc06ea15a7d04f3a54a9e49cebae62 (patch) | |
tree | 981a245fae6ceb658a50144ea642da609f8e45c8 /format.c | |
parent | b63afaea61c8076610a6003d4d046a95436460cf (diff) | |
parent | b22edcf3a5e6271625141992c1a842d295c8b89f (diff) | |
download | rtmux-d8c527a5f9fc06ea15a7d04f3a54a9e49cebae62.tar.gz rtmux-d8c527a5f9fc06ea15a7d04f3a54a9e49cebae62.tar.bz2 rtmux-d8c527a5f9fc06ea15a7d04f3a54a9e49cebae62.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'format.c')
-rw-r--r-- | format.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -4606,7 +4606,7 @@ format_expand1(struct format_expand_state *es, const char *fmt) { struct format_tree *ft = es->ft; char *buf, *out, *name; - const char *ptr, *s; + const char *ptr, *s, *style_end = NULL; size_t off, len, n, outlen; int ch, brackets; char expanded[8192]; @@ -4701,18 +4701,20 @@ format_expand1(struct format_expand_state *es, const char *fmt) break; fmt += n + 1; continue; + case '[': case '#': /* * If ##[ (with two or more #s), then it is a style and * can be left for format_draw to handle. */ - ptr = fmt; - n = 2; + ptr = fmt - (ch == '['); + n = 2 - (ch == '['); while (*ptr == '#') { ptr++; n++; } if (*ptr == '[') { + style_end = format_skip(fmt - 2, "]"); format_log(es, "found #*%zu[", n); while (len - off < n + 2) { buf = xreallocarray(buf, 2, len); @@ -4735,10 +4737,12 @@ format_expand1(struct format_expand_state *es, const char *fmt) continue; default: s = NULL; - if (ch >= 'A' && ch <= 'Z') - s = format_upper[ch - 'A']; - else if (ch >= 'a' && ch <= 'z') - s = format_lower[ch - 'a']; + if (fmt > style_end) { /* skip inside #[] */ + if (ch >= 'A' && ch <= 'Z') + s = format_upper[ch - 'A']; + else if (ch >= 'a' && ch <= 'z') + s = format_lower[ch - 'a']; + } if (s == NULL) { while (len - off < 3) { buf = xreallocarray(buf, 2, len); |