[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] libvchan: tidy up usages of fcntl in select-type sample application
Namely, don't overwrite all the other flags when twiddling O_NONBLOCK, and add basic error handling. Coverity-ID: 1055041 Signed-off-by: Matthew Daley <mattjd@xxxxxxxxx> --- v2: Adjust other fcntl usage further down as well. Use F_GETFL to modify only the O_NONBLOCK flag. Both suggested by Daniel De Graaf. Improve commit message. tools/libvchan/node-select.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tools/libvchan/node-select.c b/tools/libvchan/node-select.c index 6c6c19e..acd9bae 100644 --- a/tools/libvchan/node-select.c +++ b/tools/libvchan/node-select.c @@ -90,6 +90,7 @@ int main(int argc, char **argv) { int ret; int libxenvchan_fd; + int flags; if (argc < 4 || argv[3][0] != '/') usage(argv); if (!strcmp(argv[1], "server")) { @@ -105,8 +106,13 @@ int main(int argc, char **argv) exit(1); } - fcntl(0, F_SETFL, O_NONBLOCK); - fcntl(1, F_SETFL, O_NONBLOCK); + if ((flags = fcntl(0, F_GETFL)) == -1 || + fcntl(0, F_SETFL, flags | O_NONBLOCK) == -1 || + (flags = fcntl(1, F_GETFL)) == -1 || + fcntl(1, F_SETFL, flags | O_NONBLOCK) == -1) { + perror("fcntl"); + exit(1); + } libxenvchan_fd = libxenvchan_fd_for_select(ctrl); for (;;) { @@ -153,7 +159,11 @@ int main(int argc, char **argv) stdout_wr(); } if (!libxenvchan_is_open(ctrl)) { - fcntl(1, F_SETFL, 0); + if ((flags = fcntl(1, F_GETFL)) == -1 || + fcntl(1, F_SETFL, flags & ~O_NONBLOCK) == -1) { + perror("fcntl"); + exit(1); + } while (outsiz) stdout_wr(); return 0; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |