diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2017-01-20 12:29:34 +0000 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2017-01-25 09:52:48 +0000 |
commit | 37f0d8e6701e8476df77d5f7734afbfbe8acdd12 (patch) | |
tree | d5f1ddf650f64fbc4715d3338cfb7e82917b4765 | |
parent | 1ceefe25da9de84bc0e00542af9f5243b6cb8991 (diff) |
remove warning and add some debugging
-rw-r--r-- | src/stream-send.c | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/stream-send.c b/src/stream-send.c index 18a2400..e5f6acd 100644 --- a/src/stream-send.c +++ b/src/stream-send.c @@ -22,6 +22,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <errno.h> #include <unistd.h> #include <fcntl.h> #include <err.h> @@ -46,12 +47,29 @@ static void usage(FILE *fp) ,VERSION, portdev); } +static ssize_t +write_all(int fd, const void *buf, size_t len) +{ + size_t written = 0; + while (written < len) { + ssize_t l = write(fd, buf + written, len - written); + if (l < 0 && errno == EINTR) { + continue; + } + if (l < 0) { + return l; + } + written += l; + } + return written; +} + int main(int argc, char *argv[]) { int c; for (;;) { - if (-1 == (c = getopt(argc, argv, "-hs:"))) + if (-1 == (c = getopt(argc, argv, "hs:"))) break; switch (c) { case 's': @@ -67,6 +85,11 @@ int main(int argc, char *argv[]) } } + if (optind >= argc) { + usage(stderr); + return 1; + } + device_fd = open(portdev, O_RDWR); if (device_fd < 0) { err(1, "open %s", portdev); @@ -86,8 +109,9 @@ int main(int argc, char *argv[]) StreamMsgStreamFormat fmt = { 1024, 768, SPICE_VIDEO_CODEC_TYPE_H264, }; hdr.type = STREAM_TYPE_STREAM_FORMAT; hdr.size = sizeof(fmt); - write(device_fd, &hdr, sizeof(hdr)); - write(device_fd, &fmt, sizeof(fmt)); + printf("writing format\n"); + write_all(device_fd, &hdr, sizeof(hdr)); + write_all(device_fd, &fmt, sizeof(fmt)); for (;;) { char buffer[64 * 1024]; @@ -99,8 +123,10 @@ int main(int argc, char *argv[]) hdr.type = STREAM_TYPE_DATA; hdr.size = l; - write(device_fd, &hdr, sizeof(hdr)); - write(device_fd, buffer, l); + printf("writing data %zd bytes\n", l); + write_all(device_fd, &hdr, sizeof(hdr)); + write_all(device_fd, buffer, l); + sleep(1); } fclose(f_in); |