osc: use STRLEN() macro to make parse_rgb() more self-documenting

The empty literals in the macro are to ensure the argument itself
is a string literal, so it can't be used on anything else.
This commit is contained in:
Craig Barnes 2021-10-20 17:05:36 +01:00
parent 6dfacb9c08
commit 2e87889279
3 changed files with 5 additions and 4 deletions

View file

@ -2,6 +2,7 @@
#define PASTE(a, b) a##b
#define XPASTE(a, b) PASTE(a, b)
#define STRLEN(str) (sizeof("" str "") - 1)
#define DO_PRAGMA(x) _Pragma(#x)
#define VERCMP(x, y, cx, cy) ((cx > x) || ((cx == x) && (cy >= y)))

View file

@ -158,6 +158,7 @@ vtlib = static_library(
'composed.c', 'composed.h',
'csi.c', 'csi.h',
'dcs.c', 'dcs.h',
'macros.h',
'osc.c', 'osc.h',
'sixel.c', 'sixel.h',
'vt.c', 'vt.h',

7
osc.c
View file

@ -11,6 +11,7 @@
#include "base64.h"
#include "config.h"
#include "grid.h"
#include "macros.h"
#include "notify.h"
#include "render.h"
#include "selection.h"
@ -341,12 +342,10 @@ parse_rgb(const char *string, uint32_t *color, bool *_have_alpha,
/* Verify we have the minimum required length (for "") */
if (have_alpha) {
/* rgba:x/x/x/x */
if (len < 4 /* 'rgba' */ + 1 /* ':' */ + 3 /* '/' */ + 4 * 1 /* 4 * 'x' */)
if (len < STRLEN("rgba:x/x/x/x"))
return false;
} else {
/* rgb:x/x/x */
if (len < 3 /* 'rgb' */ + 1 /* ':' */ + 2 /* '/' */ + 3 * 1 /* 3 * 'x' */)
if (len < STRLEN("rgb:x/x/x"))
return false;
}