summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorlordjaxom <lordjaxom>2005-02-08 19:54:52 +0000
committerlordjaxom <lordjaxom>2005-02-08 19:54:52 +0000
commit78b9b7c6ba30158f97a9f6c34a16ac3047d5f4e3 (patch)
tree4b792b0fa20c5857431dc4139217f06c172fdf8a /tools
parentb2b925d1a933c9129eb84699e9893d80e7e9534d (diff)
downloadvdr-plugin-streamdev-78b9b7c6ba30158f97a9f6c34a16ac3047d5f4e3.tar.gz
vdr-plugin-streamdev-78b9b7c6ba30158f97a9f6c34a16ac3047d5f4e3.tar.bz2
- transfer
Diffstat (limited to 'tools')
-rw-r--r--tools/source.c23
-rw-r--r--tools/source.h2
2 files changed, 25 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;
diff --git a/tools/source.h b/tools/source.h
index d55f3e1..09c4bf3 100644
--- a/tools/source.h
+++ b/tools/source.h
@@ -78,6 +78,8 @@ public:
and errno is set appropriately. TimedRead only works on UNIX file
descriptor sources. */
bool TimedWrite(const void *Buffer, size_t Length, uint TimeoutMs);
+
+ bool SafeWrite(const void *Buffer, size_t Length);
/* ReadUntil() tries to read at most Length bytes into the storage pointed
to by Buffer, which must be at least Length bytes in size, within the