#include <linux/if_tun.h>
#endif
+#include "nonblocking.h"
+
#ifdef HAVE_LINUX_IF_TUN_H
# define WITH_TUN 1
#else
return;
}
- flags = fcntl (emac->tap, F_GETFL);
- fcntl (emac->tap, F_SETFL, flags | O_NONBLOCK);
+ set_nonblocking_flag (emac->tap, true);
#endif
}
#include <sys/time.h>
#include <sys/types.h>
+#include "nonblocking.h"
+
#include "sim-main.h"
#include "sim-assert.h"
#include "sim-options.h"
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;
}
#undef open
+#include "nonblocking.h"
+
#include "sim-main.h"
#include "sim-io.h"
#include "sim/callback.h"
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;
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
#include <signal.h>
+#include "nonblocking.h"
+
#include "psim.h"
#include "options.h"
#include "device.h" /* FIXME: psim should provide the interface */
#include "environ.h"
-#if !defined(O_NONBLOCK) || !defined(F_GETFL) || !defined(F_SETFL)
-#undef WITH_STDIO
-#define WITH_STDIO DO_USE_STDIO
-#endif
-
static psim *simulation = NULL;
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;
}
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;