diff options
Diffstat (limited to 'src/pen.h')
| -rw-r--r-- | src/pen.h | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -1,6 +1,7 @@ #ifndef WSAP_TERM_PEN_H #define WSAP_TERM_PEN_H +#include "compat.h" #include "term.h" #include <stdbool.h> #include <stdint.h> @@ -78,9 +79,14 @@ static inline int sgr_extended_color(const int *params, int nparams, uint16_t su if (params[i + 1] != 2) return 0; int colon = 0; - while (i + 2 + colon < nparams && i + 2 + colon < 16 && - (subparams & (1u << (i + 2 + colon)))) - colon++; + int k = i + 2; + if (k < 16 && k < nparams) { + uint32_t shifted = (~(uint32_t)subparams) >> k; + colon = term_ctz32(shifted); + int max_colon = (nparams < 16 ? nparams : 16) - k; + if (colon > max_colon) + colon = max_colon; + } int skip = colon >= 4 ? 1 : 0; if (i + 4 + skip >= nparams) return 0; |
