diff options
Diffstat (limited to 'tools/source.c')
-rw-r--r-- | tools/source.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/source.c b/tools/source.c index 3674eff..c832e2f 100644 --- a/tools/source.c +++ b/tools/source.c @@ -85,6 +85,29 @@ bool cTBSource::TimedWrite(const void *Buffer, size_t Length, uint TimeoutMs) { return true; } +bool cTBSource::SafeWrite(const void *Buffer, size_t Length) { + cTBSelect sel; + int offs; + + offs = 0; + while (Length > 0) { + int b; + + sel.Clear(); + sel.Add(m_Filed, true); + if (sel.Select() == -1) + return false; + + if (sel.CanWrite(m_Filed)) { + if ((b = Write((char*)Buffer + offs, Length)) == -1) + return false; + offs += b; + Length -= b; + } + } + return true; +} + ssize_t cTBSource::ReadUntil(void *Buffer, size_t Length, const char *Seq, uint TimeoutMs) { int seqlen, ms; |