util/DivideString: add option "strip"

This commit is contained in:
Max Kellermann 2014-12-04 23:05:44 +01:00
parent 79d2d1c201
commit 4b70f9d213
4 changed files with 28 additions and 3 deletions

View File

@ -128,7 +128,7 @@ AoOutput::Configure(const config_param &param, Error &error)
value = param.GetBlockValue("options", nullptr);
if (value != nullptr) {
for (const auto &i : SplitString(value, ';')) {
const DivideString ss(i.c_str(), '=');
const DivideString ss(i.c_str(), '=', true);
if (!ss.IsDefined()) {
error.Format(ao_output_domain,

View File

@ -18,10 +18,11 @@
*/
#include "DivideString.hxx"
#include "StringUtil.hxx"
#include <string.h>
DivideString::DivideString(const char *s, char separator)
DivideString::DivideString(const char *s, char separator, bool strip)
:first(nullptr)
{
const char *x = strchr(s, separator);
@ -31,6 +32,16 @@ DivideString::DivideString(const char *s, char separator)
size_t length = x - s;
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];
memcpy(first, s, length);
first[length] = 0;

View File

@ -33,7 +33,11 @@ class DivideString {
const char *second;
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() {
delete[] first;

View File

@ -15,6 +15,7 @@ class DivideStringTest : public CppUnit::TestFixture {
CPPUNIT_TEST(TestBasic);
CPPUNIT_TEST(TestEmpty);
CPPUNIT_TEST(TestFail);
CPPUNIT_TEST(TestStrip);
CPPUNIT_TEST_SUITE_END();
public:
@ -41,4 +42,13 @@ public:
const DivideString ds(input, '.');
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());
}
};