[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 12/25: DRAFT Add partial `scm_fcntl' support for MinGW.
From: |
Mike Gran |
Subject: |
[Guile-commits] 12/25: DRAFT Add partial `scm_fcntl' support for MinGW. |
Date: |
Thu, 10 Nov 2022 18:06:18 -0500 (EST) |
mike121 pushed a commit to branch wip-mingw
in repository guile.
commit 98b62ab0f46eaeaefd6dc761aff4cb16d76f4a96
Author: Rutger van Beusekom <rutger.van.beusekom@verum.com>
AuthorDate: Wed Nov 6 14:56:57 2019 +0100
DRAFT Add partial `scm_fcntl' support for MinGW.
* libguile/filesys.c (_mingw_debug_p)[__MINGW32__: New function.
(scm_fcntl)[__MINGW32__]: Add support creating non-blocking sockets.
---
libguile/filesys.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 82 insertions(+), 1 deletion(-)
diff --git a/libguile/filesys.c b/libguile/filesys.c
index 3400585a6..8c1a6b82b 100644
--- a/libguile/filesys.c
+++ b/libguile/filesys.c
@@ -1117,7 +1117,88 @@ SCM_DEFINE (scm_fcntl, "fcntl", 2, 1, 0,
return scm_from_int (rv);
}
#undef FUNC_NAME
-#endif /* HAVE_FCNTL */
+
+#else /* !HAVE_FCNTL */
+
+/* XXX gnulib sets these all to 0 which disallows a partial or stub
+ implementation. */
+
+#undef F_DUPFD
+#define F_DUPFD 0
+
+#undef F_GETFD
+#define F_GETFD 1
+
+#undef F_SETFD
+#define F_SETFD 2
+
+#undef F_GETFL
+#define F_GETFL 3
+
+#undef F_SETFL
+#define F_SETFL 4
+
+#undef O_NONBLOCK
+#define O_NONBLOCK 04000
+
+#undef O_ASNC
+#define O_ASYNC 020000
+
+#undef O_SYNC
+#define O_SYNC 04010000
+
+#undef O_NDELAY
+#define O_NDELAY O_NONBLOCK
+
+int
+_mingw_debug_p ()
+{
+ static int debug = -1;
+ if (debug == -1)
+ {
+ char *p = getenv ("MINGW_DEBUG");
+ debug = p ? strcmp (p, "0") : 0;
+ }
+ return debug;
+}
+
+SCM_DEFINE (scm_fcntl, "fcntl", 2, 1, 0,
+ (SCM object, SCM cmd, SCM value),
+ "Limited fctnl support for mingw:\n"
+ "OBJECT: socket\n"
+ "CMD = F_SETFL,\n"
+ "VALUE = (logior O_NONBLOCK (fcntl OBJECT F_GETFL)).")
+#define FUNC_NAME s_scm_fcntl
+{
+ static int stub = 0;
+
+ int c_cmd = scm_to_int (cmd);
+ switch (c_cmd)
+ {
+ case F_GETFL:
+ break;
+ case F_SETFL:
+ {
+ int c_value = scm_to_int (value);
+ u_long non_blocking = (c_value & O_NONBLOCK) ? 1 : 0;
+ object = SCM_COERCE_OUTPORT (object);
+ SOCKET fd = _get_osfhandle (SCM_FPORT_FDES (object));
+ if (SOCKET_ERROR == ioctlsocket (fd, FIONBIO, &non_blocking))
+ SCM_SYSERROR;
+ break;
+ }
+ default:
+ {
+ if (_mingw_debug_p () && !stub)
+ fputs ("stub: fcntl", stderr);
+ stub = 1;
+ }
+ }
+
+ return scm_from_int (0);
+}
+#undef FUNC_NAME
+#endif /* !HAVE_FCNTL */
SCM_DEFINE (scm_fsync, "fsync", 1, 0, 0,
(SCM object),
- [Guile-commits] 08/25: squash! Fix 'absolute-file-name?' and others for cross-build to MinGW., (continued)
- [Guile-commits] 08/25: squash! Fix 'absolute-file-name?' and others for cross-build to MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 10/25: Install 'mingw_take_signal' on MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 21/25: Revert "squash! Fix 'absolute-file-name?' and others for cross-build to MinGW.", Mike Gran, 2022/11/10
- [Guile-commits] 23/25: fixes for chmodat test, Mike Gran, 2022/11/10
- [Guile-commits] 06/25: Clear errno before CreateProcess for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 04/25: Add 'set-port-binary/text-mode!' procedure for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 03/25: mingw: canonicalize-path: Also canonicalize drive letter and '/'., Mike Gran, 2022/11/10
- [Guile-commits] 02/25: Link fix for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 09/25: Make `read-bytes' suspendable for socket reads on MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 11/25: Add `scm_sigaction_for_thread' stub for MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 12/25: DRAFT Add partial `scm_fcntl' support for MinGW.,
Mike Gran <=
- [Guile-commits] 14/25: REMOVEME mingw: Hardcode compile-time-file-name-convention to 'mingw., Mike Gran, 2022/11/10
- [Guile-commits] 15/25: REMOVEME guix: guile-mingw: Hardcode file-name-convention., Mike Gran, 2022/11/10
- [Guile-commits] 16/25: DEBUG guile.cmd, wine-guile.sh: Some Wine help., Mike Gran, 2022/11/10
- [Guile-commits] 05/25: Support for x86_64-w64-mingw32., Mike Gran, 2022/11/10
- [Guile-commits] 07/25: Fix 'absolute-file-name?' and others for cross-build to MinGW., Mike Gran, 2022/11/10
- [Guile-commits] 13/25: guix: Add guile-patched, guile-mingw., Mike Gran, 2022/11/10
- [Guile-commits] 19/25: For MinGW, use native signal func in sigaction, Mike Gran, 2022/11/10
- [Guile-commits] 22/25: Revert "Fix 'absolute-file-name?' and others for cross-build to MinGW.", Mike Gran, 2022/11/10
- [Guile-commits] 17/25: MinGW 64: fixes hash out-of-range error for 64-bit negative numbers, Mike Gran, 2022/11/10
- [Guile-commits] 18/25: More long integer fixes for x86_64-w64-mingw32, Mike Gran, 2022/11/10