diff options
author | Christophe Fergeau <cfergeau@redhat.com> | 2013-10-07 13:58:55 +0200 |
---|---|---|
committer | Christophe Fergeau <cfergeau@redhat.com> | 2014-01-20 12:15:41 +0100 |
commit | e46743100f1668bc1af358d65442b282f89784c1 (patch) | |
tree | 1177779621879b0bcecf9beeac48dd16f949c579 /server/reds_stream.c | |
parent | 8b347a641c885fdc31a41a1b1a55da982b580265 (diff) | |
download | spice-e46743100f1668bc1af358d65442b282f89784c1.tar.gz spice-e46743100f1668bc1af358d65442b282f89784c1.tar.xz spice-e46743100f1668bc1af358d65442b282f89784c1.zip |
Move sync_write* to reds_stream.h
They are renamed to reds_stream_write*
Diffstat (limited to 'server/reds_stream.c')
-rw-r--r-- | server/reds_stream.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/server/reds_stream.c b/server/reds_stream.c index 7adc745f..093621fb 100644 --- a/server/reds_stream.c +++ b/server/reds_stream.c @@ -57,6 +57,24 @@ ssize_t reds_stream_read(RedsStream *s, void *buf, size_t nbyte) return ret; } +bool reds_stream_write_all(RedsStream *stream, const void *in_buf, size_t n) +{ + const uint8_t *buf = (uint8_t *)in_buf; + + while (n) { + int now = reds_stream_write(stream, buf, n); + if (now <= 0) { + if (now == -1 && (errno == EINTR || errno == EAGAIN)) { + continue; + } + return FALSE; + } + n -= now; + buf += now; + } + return TRUE; +} + static ssize_t reds_stream_sasl_write(RedsStream *s, const void *buf, size_t nbyte); ssize_t reds_stream_write(RedsStream *s, const void *buf, size_t nbyte) @@ -132,6 +150,16 @@ void reds_stream_push_channel_event(RedsStream *s, int event) } #if HAVE_SASL +bool reds_stream_write_u8(RedsStream *s, uint8_t n) +{ + return reds_stream_write_all(s, &n, sizeof(uint8_t)); +} + +bool reds_stream_write_u32(RedsStream *s, uint32_t n) +{ + return reds_stream_write_all(s, &n, sizeof(uint32_t)); +} + static ssize_t reds_stream_sasl_write(RedsStream *s, const void *buf, size_t nbyte) { ssize_t ret; |