util/DivideString: add option "strip"
This commit is contained in:
parent
79d2d1c201
commit
4b70f9d213
|
@ -128,7 +128,7 @@ AoOutput::Configure(const config_param ¶m, Error &error)
|
||||||
value = param.GetBlockValue("options", nullptr);
|
value = param.GetBlockValue("options", nullptr);
|
||||||
if (value != nullptr) {
|
if (value != nullptr) {
|
||||||
for (const auto &i : SplitString(value, ';')) {
|
for (const auto &i : SplitString(value, ';')) {
|
||||||
const DivideString ss(i.c_str(), '=');
|
const DivideString ss(i.c_str(), '=', true);
|
||||||
|
|
||||||
if (!ss.IsDefined()) {
|
if (!ss.IsDefined()) {
|
||||||
error.Format(ao_output_domain,
|
error.Format(ao_output_domain,
|
||||||
|
|
|
@ -18,10 +18,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "DivideString.hxx"
|
#include "DivideString.hxx"
|
||||||
|
#include "StringUtil.hxx"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
DivideString::DivideString(const char *s, char separator)
|
DivideString::DivideString(const char *s, char separator, bool strip)
|
||||||
:first(nullptr)
|
:first(nullptr)
|
||||||
{
|
{
|
||||||
const char *x = strchr(s, separator);
|
const char *x = strchr(s, separator);
|
||||||
|
@ -31,6 +32,16 @@ DivideString::DivideString(const char *s, char separator)
|
||||||
size_t length = x - s;
|
size_t length = x - s;
|
||||||
second = x + 1;
|
second = x + 1;
|
||||||
|
|
||||||
|
if (strip)
|
||||||
|
second = StripLeft(second);
|
||||||
|
|
||||||
|
if (strip) {
|
||||||
|
const char *end = s + length;
|
||||||
|
s = StripLeft(s);
|
||||||
|
end = StripRight(s, end);
|
||||||
|
length = end - s;
|
||||||
|
}
|
||||||
|
|
||||||
first = new char[length + 1];
|
first = new char[length + 1];
|
||||||
memcpy(first, s, length);
|
memcpy(first, s, length);
|
||||||
first[length] = 0;
|
first[length] = 0;
|
||||||
|
|
|
@ -33,7 +33,11 @@ class DivideString {
|
||||||
const char *second;
|
const char *second;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DivideString(const char *s, char separator);
|
/**
|
||||||
|
* @param strip strip the first part and left-strip the second
|
||||||
|
* part?
|
||||||
|
*/
|
||||||
|
DivideString(const char *s, char separator, bool strip=false);
|
||||||
|
|
||||||
~DivideString() {
|
~DivideString() {
|
||||||
delete[] first;
|
delete[] first;
|
||||||
|
|
|
@ -15,6 +15,7 @@ class DivideStringTest : public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(TestBasic);
|
CPPUNIT_TEST(TestBasic);
|
||||||
CPPUNIT_TEST(TestEmpty);
|
CPPUNIT_TEST(TestEmpty);
|
||||||
CPPUNIT_TEST(TestFail);
|
CPPUNIT_TEST(TestFail);
|
||||||
|
CPPUNIT_TEST(TestStrip);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -41,4 +42,13 @@ public:
|
||||||
const DivideString ds(input, '.');
|
const DivideString ds(input, '.');
|
||||||
CPPUNIT_ASSERT(!ds.IsDefined());
|
CPPUNIT_ASSERT(!ds.IsDefined());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestStrip() {
|
||||||
|
constexpr char input[] = " foo\t.\nbar\r";
|
||||||
|
const DivideString ds(input, '.', true);
|
||||||
|
CPPUNIT_ASSERT(ds.IsDefined());
|
||||||
|
CPPUNIT_ASSERT(!ds.IsEmpty());
|
||||||
|
CPPUNIT_ASSERT_EQUAL(0, strcmp(ds.GetFirst(), "foo"));
|
||||||
|
CPPUNIT_ASSERT_EQUAL(input + 7, ds.GetSecond());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue