-/* $OpenBSD: colour.c,v 1.26 2023/01/03 11:43:24 nicm Exp $ */
+/* $OpenBSD: colour.c,v 1.27 2024/08/26 13:02:15 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com>
{ "yellow3", 0xcdcd00 },
{ "yellow4", 0x8b8b00 }
};
- u_int i;
- int c;
+ u_int i;
+ int c;
+ const char *errstr;
if (strncmp(name, "grey", 4) == 0 || strncmp(name, "gray", 4) == 0) {
- if (!isdigit((u_char)name[4]))
- return (0xbebebe|COLOUR_FLAG_RGB);
- c = round(2.55 * atoi(name + 4));
+ if (name[4] == '\0')
+ return (-1);
+ c = strtonum(name + 4, 0, 100, &errstr);
+ if (errstr != NULL)
+ return (-1);
+ c = round(2.55 * c);
if (c < 0 || c > 255)
return (-1);
return (colour_join_rgb(c, c, c));
-/* $OpenBSD: style.c,v 1.34 2024/01/22 16:34:46 nicm Exp $ */
+/* $OpenBSD: style.c,v 1.35 2024/08/26 13:02:15 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
style_parse(struct style *sy, const struct grid_cell *base, const char *in)
{
struct style saved;
- const char delimiters[] = " ,\n", *cp;
+ const char delimiters[] = " ,\n", *errstr;
char tmp[256], *found;
int value;
size_t end;
+ u_int n;
if (*in == '\0')
return (0);
goto error;
if (*found != '%' || found[1] == '\0')
goto error;
- for (cp = found + 1; *cp != '\0'; cp++) {
- if (!isdigit((u_char)*cp))
- goto error;
- }
+ n = strtonum(found + 1, 0, UINT_MAX, &errstr);
+ if (errstr != NULL)
+ goto error;
sy->range_type = STYLE_RANGE_PANE;
- sy->range_argument = atoi(found + 1);
+ sy->range_argument = n;
style_set_range_string(sy, "");
} else if (strcasecmp(tmp + 6, "window") == 0) {
if (found == NULL)
goto error;
- for (cp = found; *cp != '\0'; cp++) {
- if (!isdigit((u_char)*cp))
- goto error;
- }
+ n = strtonum(found, 0, UINT_MAX, &errstr);
+ if (errstr != NULL)
+ goto error;
sy->range_type = STYLE_RANGE_WINDOW;
- sy->range_argument = atoi(found);
+ sy->range_argument = n;
style_set_range_string(sy, "");
} else if (strcasecmp(tmp + 6, "session") == 0) {
if (found == NULL)
goto error;
if (*found != '$' || found[1] == '\0')
goto error;
- for (cp = found + 1; *cp != '\0'; cp++) {
- if (!isdigit((u_char)*cp))
- goto error;
- }
+ n = strtonum(found + 1, 0, UINT_MAX, &errstr);
+ if (errstr != NULL)
+ goto error;
sy->range_type = STYLE_RANGE_SESSION;
- sy->range_argument = atoi(found + 1);
+ sy->range_argument = n;
style_set_range_string(sy, "");
} else if (strcasecmp(tmp + 6, "user") == 0) {
if (found == NULL)
-/* $OpenBSD: tty-term.c,v 1.101 2023/10/17 09:55:32 nicm Exp $ */
+/* $OpenBSD: tty-term.c,v 1.102 2024/08/26 13:02:15 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicholas.marriott@gmail.com>
struct options_array_item *a;
union options_value *ov;
u_int i, j;
- const char *s, *value;
+ const char *s, *value, *errstr;
size_t offset, namelen;
char *first;
+ int n;
log_debug("adding term %s", name);
code->value.string = tty_term_strip(value);
break;
case TTYCODE_NUMBER:
- code->type = TTYCODE_NUMBER;
- code->value.number = atoi(value);
+ n = strtonum(value, 0, INT_MAX, &errstr);
+ if (errstr != NULL)
+ log_debug("%s: %s", ent->name, errstr);
+ else {
+ code->type = TTYCODE_NUMBER;
+ code->value.number = n;
+ }
break;
case TTYCODE_FLAG:
code->type = TTYCODE_FLAG;