osc: parse_legacy_color(): the alpha component is not a floating point number

When using the urxvt extension of the XParseColor format, the alpha
component is not a floating point number, but a decimal number in the
range 0-100.
This commit is contained in:
Daniel Eklöf 2021-04-07 08:00:39 +02:00
parent 8adb52e63a
commit 7fc3b18586
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

15
osc.c
View file

@ -268,19 +268,18 @@ parse_legacy_color(const char *string, uint32_t *color, bool *_have_alpha,
uint16_t alpha = 0xffff;
if (string[0] == '[') {
/* e.g. \E]11;[0.5]#00ff00 */
/* e.g. \E]11;[50]#00ff00 */
const char *start = &string[1];
const char *end = strchr(string, ']');
if (end == NULL)
return false;
char *_end;
double percent = strtod(start, &_end);
if (_end != end)
errno = 0;
char *end;
unsigned long percent = strtoul(start, &end, 10);
if (errno != 0 || *end != ']')
return false;
have_alpha = true;
alpha = 0xffff * percent;
alpha = (0xffff * min(percent, 100) + 50) / 100;
string = end + 1;
}