git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/2] color: fix max-size comment

From
Jeff King <peff@peff.net>
Date
Jun 23, 2016, 13:09 UTC
Message-ID
<20160623130955.GA12653@sigill.intra.peff.net>
In-Reply-To
<20160623130828.GA25209@sigill.intra.peff.net>

We use fixed-size buffers for colors, because we know our parsing cannot grow beyond a particular bound. However, our comment describing the max-size has two issues:

  1. It has the description in two forms: a short one, and
     one with more explanation. Over time the latter has
     been updated, but the former has not. Let's just drop
     the short one (after making sure everything it says
     is in the long one).
  2. As of ff40d18 (parse_color: recognize "no$foo" to clear
     the $foo attribute, 2014-11-20), the per-attribute size
     bumped to "3" (because "nobold" is actually "21;"). But
     that's not quite enough, as somebody may use both
     "bold" and "nobold", requiring 5 characters.
     This wasn't a problem for the final count, because we
     over-estimated in other ways, but let's clarify how we
     got to the final number.
Signed-off-by: Jeff King <peff@peff.net>
---
 color.h | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/color.h b/color.h
index e155d13..e24fa0b 100644
--- a/color.h
+++ b/color.h
@@ -3,18 +3,20 @@
 
 struct strbuf;
 
-/*  2 + (2 * num_attrs) + 8 + 1 + 8 + 'm' + NUL */
-/* "\033[1;2;4;5;7;38;5;2xx;48;5;2xxm\0" */
 /*
  * The maximum length of ANSI color sequence we would generate:
  * - leading ESC '['            2
- * - attr + ';'                 3 * 10 (e.g. "1;")
+ * - attr + ';'                 2 * num_attr (e.g. "1;")
+ * - no-attr + ';'              3 * num_attr (e.g. "22;")
  * - fg color + ';'             17 (e.g. "38;2;255;255;255;")
  * - bg color + ';'             17 (e.g. "48;2;255;255;255;")
  * - terminating 'm' NUL        2
  *
- * The above overcounts attr (we only use 5 not 8) and one semicolon
- * but it is close enough.
+ * The above overcounts by one semicolon but it is close enough.
+ *
+ * The space for attributes is also slightly overallocated, as
+ * the negation for some attributes is the same (e.g., nobold and nodim).
+ * We also allocate space for 6 attributes (even though we have only 5).
  */
 #define COLOR_MAXLEN 70
 
-- 
2.9.0.209.g845fbc1
Previous: Jeff KingNext: Jeff King
Message 3 of 24 in “Italics formatting”
  1. Simon CourtoisJun 23, 2016
  2. 0/2 more ANSI attributesJeff King, Jun 23, 2016
  3. 1/2 color: fix max-size commentJeff King, Jun 23, 2016
  4. 2/2 color: support "italic" attributeJeff King, Jun 23, 2016
  5. Simon CourtoisJun 23, 2016
  6. Junio C HamanoJun 23, 2016
  7. Jeff KingJun 23, 2016
  8. 0/7 more ANSI attributesJeff King, Jun 23, 2016
  9. 1/7 color: fix max-size commentJeff King, Jun 23, 2016
  10. 2/7 doc: refactor description of color formatJeff King, Jun 23, 2016
  11. 3/7 add skip_prefix_mem helperJeff King, Jun 23, 2016
  12. 4/7 color: refactor parse_attrJeff King, Jun 23, 2016
  13. 5/7 color: allow "no-" for negating attributesJeff King, Jun 23, 2016
  14. 6/7 color: support "italic" attributeJeff King, Jun 23, 2016
  15. Junio C HamanoJun 23, 2016
  16. Jeff KingJun 23, 2016
  17. 7/7 color: support strike-through attributeJeff King, Jun 23, 2016
  18. Junio C HamanoJun 23, 2016
  19. Jeff KingJun 23, 2016
  20. Junio C HamanoJun 23, 2016
  21. Junio C HamanoJun 23, 2016
  22. Jeff KingJun 23, 2016
  23. Junio C HamanoJun 23, 2016
  24. Junio C HamanoJun 23, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.