diff options
author | lordjaxom <lordjaxom> | 2005-02-08 19:54:52 +0000 |
---|---|---|
committer | lordjaxom <lordjaxom> | 2005-02-08 19:54:52 +0000 |
commit | 78b9b7c6ba30158f97a9f6c34a16ac3047d5f4e3 (patch) | |
tree | 4b792b0fa20c5857431dc4139217f06c172fdf8a /tools | |
parent | b2b925d1a933c9129eb84699e9893d80e7e9534d (diff) | |
download | vdr-plugin-streamdev-78b9b7c6ba30158f97a9f6c34a16ac3047d5f4e3.tar.gz vdr-plugin-streamdev-78b9b7c6ba30158f97a9f6c34a16ac3047d5f4e3.tar.bz2 |
- transfer
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source.c | 23 | ||||
-rw-r--r-- | tools/source.h | 2 |
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 |