util/StringVerify: new library
This commit is contained in:
parent
553c2e9e2b
commit
bd59c889f3
|
@ -10,6 +10,7 @@
|
||||||
#include "Partition.hxx"
|
#include "Partition.hxx"
|
||||||
#include "IdleFlags.hxx"
|
#include "IdleFlags.hxx"
|
||||||
#include "util/CharUtil.hxx"
|
#include "util/CharUtil.hxx"
|
||||||
|
#include "util/StringVerify.hxx"
|
||||||
|
|
||||||
CommandResult
|
CommandResult
|
||||||
handle_enableoutput(Client &client, Request args, Response &r)
|
handle_enableoutput(Client &client, Request args, Response &r)
|
||||||
|
@ -62,22 +63,16 @@ handle_toggleoutput(Client &client, Request args, Response &r)
|
||||||
return CommandResult::OK;
|
return CommandResult::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static constexpr bool
|
||||||
IsValidAttributeNameChar(char ch) noexcept
|
IsValidAttributeNameChar(char ch) noexcept
|
||||||
{
|
{
|
||||||
return IsAlphaNumericASCII(ch) || ch == '_';
|
return IsAlphaNumericASCII(ch) || ch == '_';
|
||||||
}
|
}
|
||||||
|
|
||||||
[[gnu::pure]]
|
static constexpr bool
|
||||||
static bool
|
|
||||||
IsValidAttributeName(const char *s) noexcept
|
IsValidAttributeName(const char *s) noexcept
|
||||||
{
|
{
|
||||||
do {
|
return CheckCharsNonEmpty(s, IsValidAttributeNameChar);
|
||||||
if (!IsValidAttributeNameChar(*s))
|
|
||||||
return false;
|
|
||||||
} while (*++s);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandResult
|
CommandResult
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include "client/Client.hxx"
|
#include "client/Client.hxx"
|
||||||
#include "client/Response.hxx"
|
#include "client/Response.hxx"
|
||||||
#include "util/CharUtil.hxx"
|
#include "util/CharUtil.hxx"
|
||||||
|
#include "util/StringVerify.hxx"
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
|
@ -39,21 +40,15 @@ handle_listpartitions(Client &client, Request, Response &r)
|
||||||
}
|
}
|
||||||
|
|
||||||
static constexpr bool
|
static constexpr bool
|
||||||
IsValidPartitionChar(char ch)
|
IsValidPartitionChar(char ch) noexcept
|
||||||
{
|
{
|
||||||
return IsAlphaNumericASCII(ch) || ch == '-' || ch == '_';
|
return IsAlphaNumericASCII(ch) || ch == '-' || ch == '_';
|
||||||
}
|
}
|
||||||
|
|
||||||
[[gnu::pure]]
|
static constexpr bool
|
||||||
static bool
|
|
||||||
IsValidPartitionName(const char *name) noexcept
|
IsValidPartitionName(const char *name) noexcept
|
||||||
{
|
{
|
||||||
do {
|
return CheckCharsNonEmpty(name, IsValidPartitionChar);
|
||||||
if (!IsValidPartitionChar(*name))
|
|
||||||
return false;
|
|
||||||
} while (*++name != 0);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[[gnu::pure]]
|
[[gnu::pure]]
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
// SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
// Copyright CM4all GmbH
|
||||||
|
// author: Max Kellermann <mk@cm4all.com>
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <concepts>
|
||||||
|
#include <string_view>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the given string consist only of characters allowed by the
|
||||||
|
* given function?
|
||||||
|
*/
|
||||||
|
constexpr bool
|
||||||
|
CheckChars(std::string_view s, std::predicate<char> auto f) noexcept
|
||||||
|
{
|
||||||
|
return std::all_of(s.begin(), s.end(), f);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the given string non-empty and consists only of characters
|
||||||
|
* allowed by the given function?
|
||||||
|
*/
|
||||||
|
constexpr bool
|
||||||
|
CheckCharsNonEmpty(std::string_view s, std::predicate<char> auto f) noexcept
|
||||||
|
{
|
||||||
|
return !s.empty() && CheckChars(s, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr bool
|
||||||
|
CheckCharsNonEmpty(const char *s, std::predicate<char> auto f) noexcept
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
if (!f(*s))
|
||||||
|
return false;
|
||||||
|
} while (*++s);
|
||||||
|
return true;
|
||||||
|
}
|
Loading…
Reference in New Issue