summaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2023-05-24 22:45:34 +0900
committerGitHub <noreply@github.com>2023-05-24 22:45:34 +0900
commit6d976eb5348098a346d82065621e37925acae8b8 (patch)
tree683b659bc406be332691f94ea6d41906fa0578c6 /win32
parent85b4cd7cf80d4029f65fde3e574b31f4b0e538ea (diff)
Fix "runs a C function with the global lock unlocked and unlocks IO with the generic RUBY_UBF_IO" on Windows. (#7848)
* Enable borked spec. * Ensure win32 wrappers are visible and used. * Reorganise `read`/`write`/`pipe` in `thread_spec.c`.
Notes
Notes: Merged-By: ioquatix <samuel@codeotaku.com>
Diffstat (limited to 'win32')
-rw-r--r--win32/win32.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/win32/win32.c b/win32/win32.c
index 308867bb07..ec65f5383b 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -7265,8 +7265,8 @@ finish_overlapped(OVERLAPPED *ol, int fd, DWORD size, rb_off_t *_offset)
#undef read
/* License: Ruby's */
-ssize_t
-rb_w32_read(int fd, void *buf, size_t size, rb_off_t *offset)
+static ssize_t
+rb_w32_read_internal(int fd, void *buf, size_t size, rb_off_t *offset)
{
SOCKET sock = TO_SOCKET(fd);
DWORD read;
@@ -7404,8 +7404,8 @@ rb_w32_read(int fd, void *buf, size_t size, rb_off_t *offset)
#undef write
/* License: Ruby's */
-ssize_t
-rb_w32_write(int fd, const void *buf, size_t size, rb_off_t *offset)
+static ssize_t
+rb_w32_write_internal(int fd, const void *buf, size_t size, rb_off_t *offset)
{
SOCKET sock = TO_SOCKET(fd);
DWORD written;
@@ -7510,14 +7510,28 @@ rb_w32_write(int fd, const void *buf, size_t size, rb_off_t *offset)
return ret;
}
-ssize_t rb_w32_pread(int descriptor, void *base, size_t size, rb_off_t offset)
+ssize_t
+rb_w32_read(int fd, void *buf, size_t size)
+{
+ return rb_w32_read_internal(fd, buf, size, NULL);
+}
+
+ssize_t
+rb_w32_write(int fd, const void *buf, size_t size)
{
- return rb_w32_read(descriptor, base, size, &offset);
+ return rb_w32_write_internal(fd, buf, size, NULL);
}
-ssize_t rb_w32_pwrite(int descriptor, const void *base, size_t size, rb_off_t offset)
+ssize_t
+rb_w32_pread(int descriptor, void *base, size_t size, rb_off_t offset)
+{
+ return rb_w32_read_internal(descriptor, base, size, &offset);
+}
+
+ssize_t
+rb_w32_pwrite(int descriptor, const void *base, size_t size, rb_off_t offset)
{
- return rb_w32_write(descriptor, base, size, &offset);
+ return rb_w32_write_internal(descriptor, base, size, &offset);
}
/* License: Ruby's */