[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] libvchan: tidy up usages of fcntl in select-type sample application
On Thu, 2013-10-31 at 16:44 +1300, Matthew Daley wrote: > 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); > + } I'm sure this is correct but it feels like it could be written in a more straightforward/readable way as a series of ifs rather than bundling them all together. Since you do the same thing twice to two file descs it might even be a candidate for a small helper function? > > 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; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |