aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar ctrlaltca2023-11-30 16:08:49 +0100
committerGravatar GitHub2023-11-30 16:08:49 +0100
commit9babfaff10e9921dc84cd28cd37c04e68eb6f4a5 (patch)
tree2906a5c143310606bd0c940d6c06a2e1c121425e /src
parentRemoved unused travis files and 10-years-not-updated changelog. (#2572) (diff)
downloadKVIrc-9babfaff10e9921dc84cd28cd37c04e68eb6f4a5.tar.gz
KVIrc-9babfaff10e9921dc84cd28cd37c04e68eb6f4a5.tar.bz2
KVIrc-9babfaff10e9921dc84cd28cd37c04e68eb6f4a5.zip
KviCString::getToken(): add option to skip empty elements (default off) (#2574)
Diffstat (limited to 'src')
-rw-r--r--src/kvilib/core/KviCString.cpp12
-rw-r--r--src/kvilib/core/KviCString.h4
-rw-r--r--src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp2
3 files changed, 13 insertions, 5 deletions
diff --git a/src/kvilib/core/KviCString.cpp b/src/kvilib/core/KviCString.cpp
index b4c8b4f07..9514fa5ad 100644
--- a/src/kvilib/core/KviCString.cpp
+++ b/src/kvilib/core/KviCString.cpp
@@ -2657,7 +2657,7 @@ KviCString & KviCString::stripLeft(char c)
return (*this);
}
-bool KviCString::getToken(KviCString & str, char sep)
+bool KviCString::getToken(KviCString & str, char sep, bool skipEmpty)
{
KVI_ASSERT(str.m_ptr);
KVI_ASSERT(str.m_ptr != m_ptr);
@@ -2673,7 +2673,11 @@ bool KviCString::getToken(KviCString & str, char sep)
KviMemory::copy(str.m_ptr, m_ptr, str.m_len);
*(str.m_ptr + str.m_len) = '\0';
while(*p && (*p == sep))
+ {
p++;
+ if(!skipEmpty)
+ break;
+ }
cutLeft(p - m_ptr);
return (m_len != 0);
}
@@ -2700,14 +2704,18 @@ bool KviCString::getLine(KviCString & str)
return true;
}
-KviCString KviCString::getToken(char sep)
+KviCString KviCString::getToken(char sep, bool skipEmpty)
{
char * p = m_ptr;
while(*p && (*p != sep))
p++;
KviCString ret(m_ptr, p);
while(*p && (*p == sep))
+ {
p++;
+ if(!skipEmpty)
+ break;
+ }
cutLeft(p - m_ptr);
return ret;
}
diff --git a/src/kvilib/core/KviCString.h b/src/kvilib/core/KviCString.h
index 43fb25b2f..459ee8b29 100644
--- a/src/kvilib/core/KviCString.h
+++ b/src/kvilib/core/KviCString.h
@@ -349,10 +349,10 @@ public:
// and returns true if there are more tokens to extract<br>
// Does not strip initial separators!!<br>
// str can NOT be this string.
- bool getToken(KviCString & str, char sep);
+ bool getToken(KviCString & str, char sep, bool skipEmpty = false);
// Does not strip initial separators!<br>
// Can assign also to this string.
- KviCString getToken(char sep);
+ KviCString getToken(char sep, bool skipEmpty = false);
// Extracts a line from the string.<br>
// Returns false if there was no data to extract
bool getLine(KviCString & str);
diff --git a/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp b/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp
index 5a4b274a8..208718e00 100644
--- a/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp
+++ b/src/kvirc/sparser/KviIrcServerParser_numericHandlers.cpp
@@ -907,7 +907,7 @@ void KviIrcServerParser::parseNumericWhoReply(KviIrcMessage * msg)
bool bIrcOp = szFlag.indexOf('*') != -1;
KviCString trailing = msg->safeTrailing();
- KviCString hops = trailing.getToken(' ');
+ KviCString hops = trailing.getToken(' ', true);
bool bHopsOk = false;
int iHops = hops.toInt(&bHopsOk);