summaryrefslogtreecommitdiffstats
path: root/server/reds_stream.c
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2013-10-07 13:58:55 +0200
committerChristophe Fergeau <cfergeau@redhat.com>2014-01-20 12:15:41 +0100
commite46743100f1668bc1af358d65442b282f89784c1 (patch)
tree1177779621879b0bcecf9beeac48dd16f949c579 /server/reds_stream.c
parent8b347a641c885fdc31a41a1b1a55da982b580265 (diff)
downloadspice-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.c28
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;