FreeCalypso > hg > freecalypso-tools
diff rvinterf/tmsh/oneshot.c @ 71:27c41e4b21ae
fc-tmsh one-shot operation mode implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 26 Oct 2016 23:51:47 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/tmsh/oneshot.c Wed Oct 26 23:51:47 2016 +0000 @@ -0,0 +1,45 @@ +/* + * This module implements the one-shot mode of operation for fc-tmsh. + */ + +#include <sys/types.h> +#include <sys/errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include "exitcodes.h" + +extern int oneshot_nowait; +extern int sock; +extern int got_tm_response; + +oneshot_command(argc, argv) + char **argv; +{ + fd_set fds; + int rc; + + if (!oneshot_nowait) + init(); /* to catch the response properly */ + rc = dispatch_oneshot_cmd(argc, argv); + if (rc) + exit(rc); + if (oneshot_nowait) + exit(0); + /* wait for response */ + for (;;) { + FD_ZERO(&fds); + FD_SET(sock, &fds); + rc = select(sock+1, &fds, 0, 0, 0); + if (rc < 0) { + if (errno == EINTR) + continue; + perror("select"); + exit(ERROR_UNIX); + } + if (FD_ISSET(sock, &fds)) + handle_rvinterf_input(); + if (got_tm_response) + exit(0); + } +}