diff options
author | Samuel Williams <[email protected]> | 2023-05-24 22:45:34 +0900 |
---|---|---|
committer | GitHub <[email protected]> | 2023-05-24 22:45:34 +0900 |
commit | 6d976eb5348098a346d82065621e37925acae8b8 (patch) | |
tree | 683b659bc406be332691f94ea6d41906fa0578c6 /win32/win32.c | |
parent | 85b4cd7cf80d4029f65fde3e574b31f4b0e538ea (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 <[email protected]>
Diffstat (limited to 'win32/win32.c')
-rw-r--r-- | win32/win32.c | 30 |
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 */ |