summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrediano Ziglio <fziglio@redhat.com>2017-01-20 12:29:34 +0000
committerFrediano Ziglio <fziglio@redhat.com>2017-01-25 09:52:48 +0000
commit37f0d8e6701e8476df77d5f7734afbfbe8acdd12 (patch)
treed5f1ddf650f64fbc4715d3338cfb7e82917b4765
parent1ceefe25da9de84bc0e00542af9f5243b6cb8991 (diff)
remove warning and add some debugging
-rw-r--r--src/stream-send.c36
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);