From b5f8b3c39df91767391832d0b6f0b12a880c2b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Thu, 16 Jun 2011 12:39:38 +0200 Subject: [linux-vdagent PATCH 3/4] vdagent: check for portdev existence and leave if not --- src/vdagent.c | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/vdagent.c b/src/vdagent.c index db18617..c40cf5f 100644 --- a/src/vdagent.c +++ b/src/vdagent.c @@ -39,6 +39,7 @@ #include "vdagentd-proto-strings.h" #include "vdagent-x11.h" +static const char *portdev = "/dev/virtio-ports/com.redhat.spice.0"; static int verbose = 0; static struct vdagent_x11 *x11 = NULL; static struct udscs_connection *client = NULL; @@ -107,9 +108,11 @@ static void usage(FILE *fp) fprintf(fp, "vdagent -- spice agent xorg client\n" "options:\n" - " -h print this text\n" - " -d log debug messages\n" - " -x don't daemonize (and log to logfile)\n"); + " -h print this text\n" + " -d log debug messages\n" + " -s set virtio serial port [%s]\n" + " -x don't daemonize (and log to logfile)\n", + portdev); } static void quit_handler(int sig) @@ -138,6 +141,13 @@ void daemonize(void) } } +static int file_test(const char *path) +{ + struct stat buffer; + + return stat(path, &buffer); +} + int main(int argc, char *argv[]) { fd_set readfds, writefds; @@ -147,12 +157,15 @@ int main(int argc, char *argv[]) struct sigaction act; for (;;) { - if (-1 == (c = getopt(argc, argv, "-dxh"))) + if (-1 == (c = getopt(argc, argv, "-dxhs:"))) break; switch (c) { case 'd': verbose++; break; + case 's': + portdev = optarg; + break; case 'x': do_daemonize = 0; break; @@ -191,6 +204,13 @@ int main(int argc, char *argv[]) fprintf(stderr, "Could not get home directory, logging to stderr\n"); } + if (file_test(portdev) != 0) { + fprintf(logfile, "Missing virtio device: %s\n", + portdev, strerror(errno)); + retval = 1; + goto finish; + } + if (do_daemonize) daemonize(); -- 1.7.5.1