{ "received_header_text", opt_stringptr, {&received_header_text} },
{ "received_headers_max", opt_int, {&received_headers_max} },
{ "recipient_unqualified_hosts", opt_stringptr, {&recipient_unqualified_hosts} },
- { "recipients_max", opt_int, {&recipients_max} },
+ { "recipients_max", opt_stringptr, {&recipients_max} },
{ "recipients_max_reject", opt_bool, {&recipients_max_reject} },
#ifdef LOOKUP_REDIS
{ "redis_servers", opt_stringptr, {&redis_servers} },
(Ustrncmp(ss+8, "_if_exists", 10) == 0 && isspace(ss[18]))))
{
uschar *t;
- int include_if_exists = isspace(ss[8])? 0 : 10;
+ int include_if_exists = isspace(ss[8]) ? 0 : 10;
config_file_item *save;
struct stat statbuf;
/* There may be leading spaces; thereafter, we expect an option name starting
with a letter. */
-while (isspace(*s)) s++;
-if (!isalpha(*s))
+if (!isalpha( Uskip_whitespace(&s) ))
log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "option setting expected: %s", s);
/* Read the name of the option, and skip any subsequent white space. If
s++;
}
name[ptr] = 0;
- while (isspace(*s)) s++;
+ Uskip_whitespace(&s);
if (Ustrcmp(name, "hide") != 0) break;
issecure = opt_secure;
ptr = 0;
/* Skip white space after = */
-if (*s == '=') while (isspace((*(++s))));
+if (*s == '=') while (isspace(*++s));
/* If there is a data block and the opt_public flag is not set, change
the data block pointer to the private options block. */
log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
"absolute value of integer \"%s\" is too large (overflow)", s);
- while (isspace(*endptr)) endptr++;
- if (*endptr)
+ if (Uskip_whitespace(&endptr))
extra_chars_error(endptr, inttype, US"integer value for ", name);
value = (int)lvalue;
if (errno == ERANGE) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN,
"absolute value of integer \"%s\" is too large (overflow)", s);
- while (isspace(*endptr)) endptr++;
- if (*endptr != 0)
+ if (Uskip_whitespace(&endptr))
extra_chars_error(endptr, inttype, US"integer value for ", name);
if (data_block)
list[count+1] = value;
if (snext == NULL) break;
s = snext + 1;
- while (isspace(*s)) s++;
+ Uskip_whitespace(&s);
}
if (count > list[0] - 2)
"failed to expand localhost_number \"%s\": %s",
host_number_string, expand_string_message);
n = Ustrtol(s, &end, 0);
- while (isspace(*end)) end++;
- if (*end)
+ if (Uskip_whitespace(&end))
log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
"localhost_number value is not a number: %s", s);
if (n > LOCALHOST_MAX)
*/
static int
-retry_arg(const uschar **paddr, int type)
+retry_arg(const uschar ** paddr, int type)
{
-const uschar *p = *paddr;
-const uschar *pp;
+const uschar * p = *paddr, * pp;
if (*p++ != ',') log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "comma expected");
pp = p;
while (isalnum(*p) || (type == 1 && *p == '.')) p++;
-if (*p != 0 && !isspace(*p) && *p != ',' && *p != ';')
+if (*p && !isspace(*p) && *p != ',' && *p != ';')
log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, "comma or semicolon expected");
*paddr = p;
r = store_mark();
/* skip over to the first non-space */
- for (current = string_copy(i->line); *current && isspace(*current); ++current)
- ;
-
- if (!*current)
+ current = string_copy(i->line);
+ if (!Uskip_whitespace(¤t))
continue;
/* Collapse runs of spaces. We stop this if we encounter one of the
for (p = current; *p; p++) if (isspace(*p))
{
- uschar *next;
+ uschar * next = p;
if (*p != ' ') *p = ' ';
- for (next = p; isspace(*next); ++next)
- ;
+ Uskip_whitespace(&p);
if (next - p > 1)
memmove(p+1, next, Ustrlen(next)+1);