summaryrefslogtreecommitdiff
path: root/tools/source.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/source.c')
-rw-r--r--tools/source.c23
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;