void logmask_from_string(const char *str, log_mask_t &mask) { if (str == nullptr) { return; } logmask_set_all(mask, false); // Start with a clean mask // If the first character is 'a' or 'A', set all severities if (unc_toupper(*str) == 'A') { logmask_set_all(mask, true); str++; } char *ptmp; bool was_dash = false; int last_level = -1; while (*str != 0) // check string until termination character { if (unc_isspace(*str)) // ignore spaces and go on with next character { str++; continue; } if (unc_isdigit(*str)) { int level = strtoul(str, &ptmp, 10); str = ptmp; logmask_set_sev(mask, static_cast<log_sev_t>(level), true); if (was_dash) { for (int idx = last_level + 1; idx < level; idx++) { logmask_set_sev(mask, static_cast<log_sev_t>(idx), true); } was_dash = false; } last_level = level; } else if (*str == '-') // a dash marks all bits until the next number { was_dash = true; str++; } else // probably a comma { last_level = -1; was_dash = false; str++; } } } // logmask_from_string
/** * Sets a log sev on or off * * @param sev The severity * @return true/false */ void log_set_sev(log_sev_t sev, bool value) { logmask_set_sev(g_log.mask, sev, value); }