/*
- * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
void
DelaySpec::parse()
{
- int r;
- char *token;
- token = strtok(NULL, "/");
-
- if (token == NULL)
+ // get the token.
+ char *token = ConfigParser::NextToken();
+ if (!token) {
self_destruct();
+ return;
+ }
- if (sscanf(token, "%d", &r) != 1)
- self_destruct();
+ // no-limit value
+ if (strcmp(token, "none") == 0 || token[0] == '-') {
+ restore_bps = -1;
+ max_bytes = -1;
+ return;
+ }
- restore_bps = r;
+ // parse the first digits into restore_bps
+ const char *p = nullptr;
+ if (!StringToInt(token, restore_bps, &p, 10) || *p != '/') {
+ debugs(77, DBG_CRITICAL, "ERROR: invalid delay rate '" << token << "'. Expecting restore/max or 'none'.");
+ self_destruct();
+ }
+ p++; // increment past the '/'
- max_bytes = GetInteger64();
+ // parse the rest into max_bytes
+ if (!StringToInt64(p, max_bytes, nullptr, 10)) {
+ debugs(77, DBG_CRITICAL, "ERROR: restore rate in '" << token << "' is not a number.");
+ self_destruct();
+ }
}
#endif
+