summaryrefslogtreecommitdiff
path: root/tools/source.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/source.c')
-rw-r--r--tools/source.c87
1 files changed, 20 insertions, 67 deletions
diff --git a/tools/source.c b/tools/source.c
index e882583..3674eff 100644
--- a/tools/source.c
+++ b/tools/source.c
@@ -87,30 +87,25 @@ bool cTBSource::TimedWrite(const void *Buffer, size_t Length, uint TimeoutMs) {
ssize_t cTBSource::ReadUntil(void *Buffer, size_t Length, const char *Seq,
uint TimeoutMs) {
- char *offs;
int seqlen, ms;
- size_t olen;
+ size_t len;
cTBSelect sel;
- seqlen = strlen(Seq);
- if ((offs = (char*)memmem(m_LineBuffer, m_LineBuffer.Length(), Seq, seqlen))){
- olen = offs - m_LineBuffer;
- if (olen >= Length) {
+ if ((len = m_LineBuffer.find(Seq)) != (size_t)-1) {
+ if (len > Length) {
errno = ENOBUFS;
return -1;
}
- memcpy(Buffer, m_LineBuffer, olen);
- m_LineBuffer = m_LineBuffer.Mid(olen + seqlen);
- Dprintf("ReadUntil: Served from Linebuffer: %d, |%.*s|\n", olen, olen - 1,
+ memcpy(Buffer, m_LineBuffer.data(), len);
+ m_LineBuffer.erase(0, len + strlen(Seq));
+ Dprintf("ReadUntil: Served from Linebuffer: %d, |%.*s|\n", len, len - 1,
(char*)Buffer);
- return olen;
+ return len;
}
cTimeMs starttime;
ms = TimeoutMs;
- while (m_LineBuffer.Length() < BUFSIZ) {
- int b;
-
+ while (m_LineBuffer.size() < BUFSIZ) {
sel.Clear();
sel.Add(m_Filed, false);
@@ -118,25 +113,24 @@ ssize_t cTBSource::ReadUntil(void *Buffer, size_t Length, const char *Seq,
return -1;
if (sel.CanRead(m_Filed)) {
- offs = m_LineBuffer.Buffer(BUFSIZ);
- if ((b = Read(offs + m_LineBuffer.Length(), BUFSIZ
- - m_LineBuffer.Length())) == -1)
+ int b;
+
+ len = m_LineBuffer.size();
+ m_LineBuffer.resize(BUFSIZ);
+ if ((b = Read((char*)m_LineBuffer.data() + len, BUFSIZ - len)) == -1)
return -1;
+ m_LineBuffer.resize(len + b);
- m_LineBuffer.Release(m_LineBuffer.Length() + b);
- if ((offs = (char*)memmem(m_LineBuffer, m_LineBuffer.Length(), Seq,
- seqlen))) {
- olen = offs - m_LineBuffer;
- if (olen >= Length) {
+ if ((len = m_LineBuffer.find(Seq)) != (size_t)-1) {
+ if (len > Length) {
errno = ENOBUFS;
return -1;
}
- memcpy(Buffer, m_LineBuffer, olen);
- m_LineBuffer = m_LineBuffer.Mid(olen + seqlen, m_LineBuffer.Length()
- - olen - seqlen);
- Dprintf("ReadUntil: Served after Read: %d, |%.*s|\n", olen, olen-1,
+ memcpy(Buffer, m_LineBuffer.data(), len);
+ m_LineBuffer.erase(0, len + strlen(Seq));
+ Dprintf("ReadUntil: Served from Linebuffer: %d, |%.*s|\n", len, len - 1,
(char*)Buffer);
- return olen;
+ return len;
}
}
@@ -148,46 +142,5 @@ ssize_t cTBSource::ReadUntil(void *Buffer, size_t Length, const char *Seq,
}
errno = ENOBUFS;
return -1;
-
-
-
-/*
- cTBSelect sel;
- time_t st, et;
- int ms, seqlen, offs;
-
- seqlen = strlen(Seq);
- st = time_ms();
- ms = TimeoutMs;
- offs = 0;
- while (Length > 0) {
- int b;
-
- sel.Clear();
- sel.Add(m_Filed, false);
- if (sel.Select(ms) == -1)
- return -1;
-
- if (sel.CanRead(m_Filed)) {
- if ((b = Read((char*)Buffer + offs, Length)) == -1)
- return -1;
-
- offs += b;
- Length -= b;
-
- if (memmem(Buffer, offs, Seq, seqlen) != NULL)
- return offs;
- }
-
- et = time_ms();
- ms -= et - st;
- if (ms <= 0) {
- errno = ETIMEDOUT;
- return -1;
- }
- }
- errno = ENOBUFS;
- return -1;
-*/
}