Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Mike Frysinger via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Subject: [PATCH 2/2] sim: use gnulib to set nonblocking mode
Date: Thu,  9 Sep 2021 02:38:36 -0400	[thread overview]
Message-ID: <20210909063836.16875-2-vapier@gentoo.org> (raw)
In-Reply-To: <20210909063836.16875-1-vapier@gentoo.org>

Replace various custom ad-hoc fcntl/O_NONBLOCK implementations with
the gnulib nonblocking module.  This makes our code much tidier and
portable to other systems (e.g. Windows).
---
 sim/bfin/dv-bfin_emac.c |  5 +++--
 sim/common/dv-sockser.c | 11 +++--------
 sim/common/sim-io.c     | 22 +++++++---------------
 sim/ppc/main.c          | 20 ++++++--------------
 4 files changed, 19 insertions(+), 39 deletions(-)

diff --git a/sim/bfin/dv-bfin_emac.c b/sim/bfin/dv-bfin_emac.c
index e5ceedbef514..b53191d3838a 100644
--- a/sim/bfin/dv-bfin_emac.c
+++ b/sim/bfin/dv-bfin_emac.c
@@ -35,6 +35,8 @@
 #include <linux/if_tun.h>
 #endif
 
+#include "nonblocking.h"
+
 #ifdef HAVE_LINUX_IF_TUN_H
 # define WITH_TUN 1
 #else
@@ -570,8 +572,7 @@ bfin_emac_tap_init (struct hw *me)
       return;
     }
 
-  flags = fcntl (emac->tap, F_GETFL);
-  fcntl (emac->tap, F_SETFL, flags | O_NONBLOCK);
+  set_nonblocking_flag (emac->tap, true);
 #endif
 }
 
diff --git a/sim/common/dv-sockser.c b/sim/common/dv-sockser.c
index 477e8f681af7..5423765c66a3 100644
--- a/sim/common/dv-sockser.c
+++ b/sim/common/dv-sockser.c
@@ -24,9 +24,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <string.h>
 #include <signal.h>
 #include <stdlib.h>
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -40,6 +37,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #include <sys/select.h>
 #include <sys/socket.h>
 
+#include "nonblocking.h"
+
 #include "sim-main.h"
 #include "sim-assert.h"
 #include "sim-options.h"
@@ -256,17 +255,13 @@ connected_p (SIM_DESC sd)
     return 0;
 
   /* Set non-blocking i/o.  */
-#if defined(F_GETFL) && defined(O_NONBLOCK)
-  flags = fcntl (sockser_fd, F_GETFL);
-  flags |= O_NONBLOCK;
-  if (fcntl (sockser_fd, F_SETFL, flags) == -1)
+  if (set_nonblocking_flag (sockser_fd, true))
     {
       sim_io_eprintf (sd, "unable to set nonblocking i/o");
       close (sockser_fd);
       sockser_fd = -1;
       return 0;
     }
-#endif
   return 1;
 }
 
diff --git a/sim/common/sim-io.c b/sim/common/sim-io.c
index a5a7ff17b067..9398cba57233 100644
--- a/sim/common/sim-io.c
+++ b/sim/common/sim-io.c
@@ -22,15 +22,14 @@
 /* This must come before any other includes.  */
 #include "defs.h"
 
+#include "nonblocking.h"
+
 #include "sim-main.h"
 #include "sim-io.h"
 #include "sim/callback.h"
 #include "targ-vals.h"
 
 #include <errno.h>
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
 
 #if HAVE_UNISTD_H
 #include <unistd.h>
@@ -350,23 +349,20 @@ sim_io_poll_read (SIM_DESC sd,
 		  char *buf,
 		  int sizeof_buf)
 {
-#if defined(O_NONBLOCK) && defined(F_GETFL) && defined(F_SETFL)
   int fd = STATE_CALLBACK (sd)->fdmap[sim_io_fd];
-  int flags;
   int status;
   int nr_read;
   int result;
   STATE_CALLBACK (sd)->last_errno = 0;
   /* get the old status */
-  flags = fcntl (fd, F_GETFL, 0);
-  if (flags == -1)
+  status = get_nonblocking_flag (fd);
+  if (status == -1)
     {
-      perror ("sim_io_poll_read");
+      perror ("sim_io_read_stdin");
       return 0;
     }
   /* temp, disable blocking IO */
-  status = fcntl (fd, F_SETFL, flags | O_NONBLOCK);
-  if (status == -1)
+  if (status == 0 && set_nonblocking_flag (fd, true) == -1)
     {
       perror ("sim_io_read_stdin");
       return 0;
@@ -384,16 +380,12 @@ sim_io_poll_read (SIM_DESC sd,
       STATE_CALLBACK (sd)->last_errno = errno;
     }
   /* return to regular vewing */
-  status = fcntl (fd, F_SETFL, flags);
-  if (status == -1)
+  if (status == 0 && set_nonblocking_flag (fd, false) == -1)
     {
       perror ("sim_io_read_stdin");
       /* return 0; */
     }
   return result;
-#else
-  return sim_io_read (sd, sim_io_fd, buf, sizeof_buf);
-#endif
 }
 
 int
diff --git a/sim/ppc/main.c b/sim/ppc/main.c
index d9a40700973d..f64b163afea7 100644
--- a/sim/ppc/main.c
+++ b/sim/ppc/main.c
@@ -26,6 +26,8 @@
 
 #include <signal.h>
 
+#include "nonblocking.h"
+
 #include "psim.h"
 #include "options.h"
 #include "device.h" /* FIXME: psim should provide the interface */
@@ -42,11 +44,6 @@
 #include <string.h>
 #include <errno.h>
 
-#if !defined(O_NONBLOCK) || !defined(F_GETFL) || !defined(F_SETFL)
-#undef WITH_STDIO
-#define WITH_STDIO DO_USE_STDIO
-#endif
-
 
 extern char **environ;
 
@@ -152,22 +149,19 @@ sim_io_read_stdin(char *buf,
     return sim_io_eof;
     break;
   case DONT_USE_STDIO:
-#if defined(O_NONBLOCK) && defined(F_GETFL) && defined(F_SETFL)
     {
       /* check for input */
-      int flags;
       int status;
       int nr_read;
       int result;
       /* get the old status */
-      flags = fcntl(0, F_GETFL, 0);
-      if (flags == -1) {
+      status = get_nonblocking_flag (0);
+      if (status == -1) {
 	perror("sim_io_read_stdin");
 	return sim_io_eof;
       }
       /* temp, disable blocking IO */
-      status = fcntl(0, F_SETFL, flags | O_NONBLOCK);
-      if (status == -1) {
+      if (status == 0 && set_nonblocking_flag (0, true) == -1) {
 	perror("sim_io_read_stdin");
 	return sim_io_eof;
       }
@@ -185,15 +179,13 @@ sim_io_read_stdin(char *buf,
 	  result = sim_io_eof;
       }
       /* return to regular vewing */
-      status = fcntl(0, F_SETFL, flags);
-      if (status == -1) {
+      if (status == 0 && set_nonblocking_flag (0, false) == -1) {
 	perror("sim_io_read_stdin");
 	return sim_io_eof;
       }
       return result;
     }
     break;
-#endif
   default:
     error("sim_io_read_stdin: invalid switch\n");
     break;
-- 
2.33.0


  reply	other threads:[~2021-09-09  6:39 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-09  6:38 [PATCH 1/2] gnulib: import nonblocking module Mike Frysinger via Gdb-patches
2021-09-09  6:38 ` Mike Frysinger via Gdb-patches [this message]
2021-09-09  7:24   ` [PATCH 2/2] sim: use gnulib to set nonblocking mode Eli Zaretskii via Gdb-patches
2021-09-09  7:33     ` Mike Frysinger via Gdb-patches
2021-09-09  7:44       ` Eli Zaretskii via Gdb-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210909063836.16875-2-vapier@gentoo.org \
    --to=gdb-patches@sourceware.org \
    --cc=vapier@gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox