Squashed 'third_party/allwpilib/' changes from f1a82828fe..ce550705d7

ce550705d7 [ntcore] Fix client "received unknown id -1" (#6186)
3989617bde [ntcore] NetworkTable::GetStruct: Add I template param (#6183)
f1836e1321 [fieldImages] Fix 2024 field json (#6179)
d05f179a9a [build] Fix running apriltagsvision Java example (#6173)
b1b03bed85 [wpilib] Update MotorControllerGroup deprecation message (#6171)
fa63fbf446 LICENSE.md: Bump year to 2024 (#6169)
4809f3d0fc [apriltag] Add 2024 AprilTag locations (#6168)
dd90965362 [wpiutil] Fix RawFrame.setInfo() NPE (#6167)
8659372d08 [fieldImages] Add 2024 field image (#6166)
a2e4d0b15d [docs] Fix docs for SysID routine (#6164)
0a46a3a618 [wpilib] Make ADXL345 default I2C address public (#6163)
7c26bc70ab [sysid] Load DataLog files directly for analysis (#6103)
f94e3d81b9 [docs] Fix SysId routine JavaDoc warnings (#6159)
6bed82a18e [wpilibc] Clean up C++ SysId routine (#6160)
4595f84719 [wpilib] Report LiveWindow-enabled-in-test (#6158)
707cb06105 [wpilib] Add SysIdRoutine logging utility and command factory (#6033)
3e40b9e5da [wpilib] Correct SmartDashboard usage reporting (#6157)
106518c3f8 [docs] Fix wpilibj JavaDoc warnings (#6154)
19cb2a8eb4 [wpilibj] Make class variables private to match C++ (#6153)
13f4460e00 [docs] Add missing docs to enum fields (NFC) (#6150)
4210f5635d [docs] Fix warnings about undocumented default constructors (#6151)
0f060afb55 [ntcore] Disable WebSocket fragmentation (#6149)
f29a7d2e50 [docs] Add missing JavaDocs (#6146)
6e58db398d [commands] Make Java fields private (#6148)
4ac0720385 [build] Clean up CMake files (#6141)
44db3e0ac0 [sysid] Make constexpr variables outside class scope inline (#6145)
73c7d87db7 [glass] NTStringChooser: Properly set retained (#6144)
25636b712f [build] Remove unnecessary native dependencies in wpilibjExamples (#6143)
01fb98baaa [docs] Add Missing JNI docs from C++ (NFC) (#6139)
5c424248c4 [wpilibj] Remove unused AnalogTriggerException (#6142)
c486972c55 [wpimath] Make ExponentialProfile.State mutable (#6138)
783acb9b72 [wpilibj] Store long preferences as integers (#6136)
99ab836894 [wpiutil] Add missing JavaDocs (NFC) (#6132)
ad0859a8c9 [docs] Add missing JavaDocs (#6125)
5579219716 [docs] Exclude quickbuf files and proto/struct packages from doclint (#6128)
98f06911c7 [sysid] Use eigenvector component instead of eigenvalue for fit quality check (#6131)
e1d49b975c [wpimath] Add LinearFilter reset() overload to initialize input and output buffers (#6133)
8a0bf2b7a4 [hal] Add CANAPITypes to java (#6121)
91d8837c11 [wpilib] Make protected fields in accelerometers/gyros private (#6134)
e7c9f27683 [wpilib] Add functional interface equivalents to MotorController (#6053)
8aca706217 [glass] Add type information to SmartDashboard menu (#6117)
7d3e4ddba9 [docs] Add warning about using user button to docs (NFC) (#6129)
ec3cb3dcba [build] Disable clang-tidy warning about test case names (#6127)
495585b25d [examples] Update april tag family to 36h11 (#6126)
f9aabc5ab2 [wpilib] Throw early when EventLoop is modified while running (#6115)
c16946c0ec [hal] Add CANJNI docs (NFC) (#6120)
b7f4eb2811 [doc] Update maven artifacts for units and apriltags (NFC) (#6123)
f419a62b38 [doc] Update maintainers.md (NFC) (#6124)
938bf45fd9 [wpiutil] Remove type param from ProtobufSerializable and StructSerializable (#6122)
c34debe012 [docs] Link to external OpenCV docs (#6119)
07183765de [hal] Fix formatting of HAL_ENUM enums (NFC) (#6114)
af46034b7f [wpilib] Document only first party controllers are guaranteed to have correct mapping (#6112)
636ef58d94 [hal] Properly error check readCANStreamSession (#6108)
cc631d2a69 [build] Fix generated source set location in the HAL (#6113)
09f76b32c2 [wpimath] Compile with UTF-8 encoding (#6111)
47c5fd8620 [sysid] Check data quality before OLS (#6110)
24a76be694 [hal] Add method to detect if the CAN Stream has overflowed (#6105)
9333951736 [hal] Allocate CANStreamMessage in JNI if null (#6107)
6a2d3c30a6 [wpiutil] Struct: Add info template parameter pack (#6086)
e07de37e64 [commands] Mark ParallelDeadlineGroup.setDeadline() final (#6102)
141241d2d6 [wpilib] Fix usage reporting for static classes (#6090)
f2c2bab7dc [sysid] Fix adjusted R² calculation (#6101)
5659038443 [wpiutil,cscore,apriltag] Fix RawFrame (#6098)
8aeee03626 [commands] Improve error message when composing commands twice in same composition (#6091)
55508706ff [wpiutil,cscore] Move VideoMode.PixelFormat to wpiutil (#6097)
ab78b930e9 [wpilib] ADIS16470: Add access to all 3 axes (#6074)
795d4be9fd [wpilib] Fix precision issue in Color round-and-clamp (#6100)
7aa9ad44b8 [commands] Deprecate C++ TransferOwnership() (#6095)
92c81d0791 [ci] Update pregenerate workflow to actions/checkout@v4 (#6094)
1ce617be07 [ci] Update artifact actions to v4 (#6092)
2441b57156 [wpilib] Add PWMSparkFlex MotorController (#6089)
21d1972d7a [wpiutil] DataLog: Ensure file is written on shutdown (#6087)
c29e8c66cf [wpiutil] DataLog: Fix UB in AppendImpl (#6088)
ab309e34ef [glass] Fix order of loading window settings (#6056)
22a322c9f3 [wpimath] Report error on negative PID gains (#6055)
1dba26c937 [wpilib] Add method to get breaker fault at a specific channel in PowerDistribution[Sticky]Faults (#5521)
ef1cb3f41e [commands] Fix compose-while-scheduled issue and test all compositions (#5581)
aeb1a4aa33 [wpiutil] Add serializable marker interfaces (#6060)
c1178d5add [wpilib] Add StadiaController and command wrapper (#6083)
4e4a468d4d [wpimath] Make feedforward classes throw exceptions for negative Kv or Ka (#6084)
d1793f077d [build] cmake: Add NO_WERROR option to disable -Werror (#6071)
43fb6e9f87 [glass] Add Profiled PID controller support & IZone Support (#5959)
bcef6c5398 [apriltag] Fix Java generation functions (#6063)
4059e0cd9f [hal,wpilib] Add function to control "Radio" LED (#6073)
0b2cfb3abc [dlt] Change datalogtool default folder to logs folder (#6079)
df5e439b0c [wpilib] PS4Controller: enable usage reporting (#6081)
0ff7478968 [cscore] Fix RawFrame class not being loaded in JNI (#6077)
6f23d32fe1 [wpilib] AddressableLED: Update warning about single driver (NFC) (#6069)
35a1c52788 [build] Upgrade quickbuf to 1.3.3 (#6072)
e4e2bafdb1 [sysid] Document timestamp units (#6065)
3d201c71f7 [ntcore] Fix overlapping subscriber handling (#6067)
f02984159f [glass] Check for null entries when updating struct/proto (#6059)
a004c9e05f [commands] SubsystemBase: allow setting name in constructor (#6052)
0b4c6a1546 [wpimath] Add more docs to SimulatedAnnealing (NFC) (#6054)
ab15dae887 [wpilib] ArcadeDrive: Fix max output handling (#6051)
9599c1f56f [hal] Add usage reporting ids from 2024v2 image (#6041)
f87c64af8a [wpimath] MecanumDriveWheelSpeeds: Fix desaturate() (#6040)
8798700cec [wpilibcExamples] Add inline specifier to constexpr constants (#6049)
85c9ae6eff [wpilib] Fix PS5 Controller mappings (#6050)
7c8b7a97ad [wpiutil] Zero out roborio system timestamp (#6042)
d9b504bc84 [wpilib] DataLogManager: Change sim location to logs subdir (#6039)
906b810136 [build] cmake: Fix ntcore generated header install (#6038)
56e5b404d1 Update to final 2024 V2 image (#6034)
8723ee5c39 [ntcore] Add cached topic property (#5494)
192a28af47 Fix JDK 21 warnings (#6028)
d40bdd70ba [build] Upgrade to spotbugs Gradle plugin 6.0.2 (#6027)
7bfadf32e5 [wpilibj] Joystick: make remainder of get axis methods final (#6024)
a770110438 [commands] CommandCompositionError: Include stacktrace of original composition (#5984)
54a55b8b53 [wpiutil,hal] Update image; init Rio Now() HMB with a FPGA session (#6016)
7d4e515a6b [wpimath] Simplify calculation of C for DARE precondition (#6022)
5200316c14 [ntcore] Update transmit period on topic add/remove (#6021)
ddf79a25d4 [wpiunits] Overload Measure.per(Time) to return Measure<Velocity> (#6018)
a71adef316 [wpiutil] Clean up circular_buffer iterator syntax (#6020)
39a0bf4b98 [examples] Call resetOdometry() when controller command is executed (#5905)
f5fc101fda [build] cmake: Export jars and clean up jar installs (#6014)
38bf024c96 [build] Update to Gradle 8.5 (#6007)
9d11544c18 [wpimath] Rotate traveling salesman solution so input and solution have same initial pose (#6015)
28deba20f5 [wpimath] Commit generated quickbuf Java files (#5994)
c2971c0bb3 [build] cmake: Export apriltag and wpimath (#6012)
41cfc961e4 gitattributes: Add linguist-generated locations (#6004)
14c3ade155 [wpimath] Struct cleanup (#6011)
90757b9e90 [wpilib] Make Color::HexString() constexpr (#5985)
2676b77873 Fix compilation issues that occur when building with bazel (#6008)
d32c10487c [examples] Update C++ examples to use CommandPtr (#5988)
9bc5fcf886 [build] cmake: Default WITH_JAVA_SOURCE to WITH_JAVA (#6005)
d431abba3b [upstream_utils] Fix GCEM namespace usage and add hypot(x, y, z) (#6002)
2bb1409b82 Clean up Java style (#5990)
66172ab288 Remove submodule (#6003)
e8f8c0ceb0 [upstream_utils] Update to latest Eigen HEAD (#5996)
890992a849 [hal] Commit generated usage reporting files (#5993)
a583ca01e1 [wpiutil] Change Struct to allow non-constexpr implementation (#5992)
ca272de400 [build] Fix Gradle compile_commands.json and clang-tidy warnings (#5977)
76ae090570 [wpiutil] type_traits: Add is_constexpr() (#5997)
5172ab8fd0 [commands] C++ CommandPtr: Prevent null initialization (#5991)
96914143ba [build] Bump native-utils to fix compile_commands.json (#5989)
464e6121ef [ci] Report failed status to Azure on failed tests (#2654)
5dad46cd45 [wpimath] Commit generated files (#5986)
54ab65a63a [ntcore] Commit generated files (#5962)
7ed900ae3a [wpilib] Add hex string constructor to Color and Color8Bit (#5063)
74b85b76a9 [wpimath] Make gcem call std functions if not constant-evaluated (#5983)
30816111db [wpimath] Fix TimeInterpolatableBuffer crash (#5972)
5cc923de33 [wpilib] DataLogManager: Use logs subdirectory on USB drives (#5975)
1144115da0 [commands] Add GetName to Subsystem, use in Scheduler tracer epochs (#5836)
ac7d726ac3 [wpimath] Add simulated annealing (#5961)
e09be72ee0 [wpimath] Remove unused SimpleMatrixUtils class (#5979)
0f9ebe92d9 [wpimath] Add generic circular buffer class to Java (#5969)
9fa28eb07a [ci] Bump actions/checkout to v4 (#5736)
ca684ac207 [hal] Add capability to read power distribution data as a stream (#4983)
51eecef2bd [wpimath] Optimize 2nd derivative of quintic splines (#3292)
4fcf0b25a1 [build] Apply a formatter for CMake files (#5973)
9b8011aa67 [build] Pin wpiformat version (#5982)
e00a0e84c1 [build] cmake: fix protobuf dependency finding for certain distributions (#5981)
23dd591394 [upstream_utils] Remove libuv patch that adjusts whitespace (#5976)
b0719942f0 [wpiutil] Timestamp: Report errors on Rio HMB init failure (#5974)
7bc89c4322 [wpilib] Update getAlliance() docs (NFC) (#5971)
841ea682d1 [upstream_utils] Upgrade to LLVM 17.0.5 (#5970)
a74db52dae [cameraserver] Add getVideo() pixelFormat overload (#5966)
a7eb422662 [build] Update native utils for new compile commands files (#5968)
544b231d4d [sysid] Add missing cassert include (#5967)
31cd015970 [wpimath] Add SysId doc links to LinearSystemId in C++ (NFC) (#5960)
9280054eab Revert "[build] Export wpimath protobuf symbols (#5952)"
2aba97c610 Export pb files from wpimath
c80b2d2017 [build] Export wpimath protobuf symbols (#5952)
3c0652c18a [cscore] Replace CS_PixelFormat with WPI_PixelFormat (#5954)
95716eb0cb [wpiunits] Documentation improvements (#5932)
423fd75fa8 [wpilib] Default LiveWindowEnabledInTest to false (#5950)
dfdea9c992 [wpimath] Make KalmanFilter variant for asymmetric updates (#5951)
ca81ced409 [wpiutil] Move RawFrame to wpiutil; add generation of RawFrame for AprilTags (#5923)
437cc91af5 [cscore] CvSink: Allow specifying output PixelFormat (#5943)
25b7dca46b [build] Remove CMake flat install option (#5944)
bb05e20247 [wpimath] Add protobuf/struct for trivial types (#5935)
35744a036e [wpimath] Move struct/proto classes to separate files (#5918)
80d7ad58ea [build] Declare platform launcher dependency explicitly (#5909)
f8d983b154 [ntcore] Protobuf/Struct: Use atomic_bool instead of atomic_flag (#5946)
4a44210ee3 [ntcore] NetworkTableInstance: Suppress unused lambda capture warning (#5947)
bdc8620d55 [upstream_utils] Fix fmt compilation errors on Windows (#5948)
0ca1e9b5f9 [wpimath] Add basic wpiunits support (#5821)
cc30824409 [ntcore] Increase client meta-topic decoding limit (#5934)
b1fad062f7 [wpilib] Use RKDP in DifferentialDrivetrainSim (#5931)
ead9ae5a69 [build] Add generateProto dependency to test and dev (#5933)
cfbff32185 [wpiutil] timestamp: Fix startup race on Rio (#5930)
7d90d0bcc3 [wpimath] Clean up StateSpaceUtil (#5891)
7755e45aac [build] Add generated protobuf headers to C++ test include path (#5926)
3985c031da [ntcore] ProtobufSubscriber: Fix typos (#5928)
7a87fe4b60 [ntcore] ProtobufSubscriber: Make mutex and msg mutable (#5927)
09f3ed6a5f [commands] Add static Trigger factories for robot mode changes (#5902)
79dd795bc0 [wpimath] Clean up VecBuilder and MatBuilder (#5906)
e117274a67 [wpilib] Change default Rio log dir from /home/lvuser to /home/lvuser/logs (#5899)
a8b80ca256 [upstream_utils] Update to libuv 1.47.0 (#5889)
b3a9c3e96b [build] Bump macOS deployment target to 12 (#5890)
0f8129677b [build] Distribute wpimath protobuf headers (#5925)
d105f9e3e9 [wpiutil] ProtobufBuffer: Fix buffer reallocation (#5924)
c5f2f6a0fb [fieldImages] Fix typo in field images artifact name (#5922)
c1a57e422a [commands] Clean up make_vector.h (#5917)
78ebc6e9ec [wpimath] change G to gearing in LinearSystemId factories (#5834)
9ada181866 [hal] DriverStation.h: Add stddef.h include (#5897)
95fa5ec72f [wpilibc,ntcoreffi] DataLogManager: join on Stop() call (#5910)
b6f2d3cc14 [build] Remove usage of Version.parse (#5911)
cc2cbeb04c [examples] Replace gyro rotation with poseEstimator rotation (#5900)
fa6b171e1c [wpiutil] Suppress protobuf warning false positives on GCC 13 (#5907)
d504639bbe [apriltag] Improve AprilTag docs (#5895)
3a1194be40 Replace static_cast<void>() with [[maybe_unused]] attribute (#5892)
70392cbbcb [build] cmake: Add protobuf dependency to wpiutil-config (#5886)
17c1bd5a83 [ntcore] Use json_fwd (#5881)
e69a9efeba [wpilibcExamples] Match array parameter bounds (#5880)
14dcd0d26f Use char instead of uint8_t for json::parse (#5877)
ec1d261984 [hal] Fix garbage data for match info before DS connection (#5879)
63dbf5c614 [wpiutil] MemoryBuffer: Fix normal read and file type check (#5875)
b2e7be9250 [ntcore] Only datalog meta-topics if specifically requested (#5873)
201a42a3cd [wpimath] Reorder TrapezoidProfile.calculate() arguments (#5874)
04a781b4d7 [apriltag] Add GetTags to C++ version of AprilTagFieldLayout (#5872)
87a8a1ced4 [docs] Exclude eigen and protobuf from doxygen (#5871)

git-subtree-dir: third_party/allwpilib
git-subtree-split: ce550705d7cdab117c0153a202973fc026a81274
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: Ic8645d0551d62b411b0a816c493f0f33291896a1
diff --git a/upstream_utils/libuv_patches/0001-Revert-win-process-write-minidumps-when-sending-SIGQ.patch b/upstream_utils/libuv_patches/0001-Revert-win-process-write-minidumps-when-sending-SIGQ.patch
index 890b8c3..adc2b3f 100644
--- a/upstream_utils/libuv_patches/0001-Revert-win-process-write-minidumps-when-sending-SIGQ.patch
+++ b/upstream_utils/libuv_patches/0001-Revert-win-process-write-minidumps-when-sending-SIGQ.patch
@@ -1,42 +1,43 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Tyler Veness <calcmogul@gmail.com>
 Date: Fri, 14 Jul 2023 17:33:08 -0700
-Subject: [PATCH 01/10] Revert "win,process: write minidumps when sending
- SIGQUIT (#3840)"
+Subject: [PATCH 1/9] Revert "win,process: write minidumps when sending SIGQUIT
+ (#3840)"
 
 This reverts commit 748d894e82abcdfff7429cf745003e182c47f163.
 ---
- CMakeLists.txt    |   5 +-
+ CMakeLists.txt    |   6 +--
  configure.ac      |   2 +-
  include/uv/win.h  |   1 -
  src/win/process.c | 116 ----------------------------------------------
- 4 files changed, 2 insertions(+), 122 deletions(-)
+ 4 files changed, 2 insertions(+), 123 deletions(-)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 93733dd04783436cc1f1a801133e67e315f4af8d..0958dfb1bd93311cd0e20506311e1e41774c5fa4 100644
+index 72377851b69f74c5285fd34ae206ad6bed3745c1..3ec6bd00542f5aacfc6245b1f82e365eb1cff02c 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -183,10 +183,7 @@ if(WIN32)
+@@ -183,11 +183,7 @@ if(WIN32)
         advapi32
         iphlpapi
         userenv
 -       ws2_32
 -       dbghelp
 -       ole32
--       uuid)
+-       uuid
+-       shell32)
 +       ws2_32)
    list(APPEND uv_sources
         src/win/async.c
         src/win/core.c
 diff --git a/configure.ac b/configure.ac
-index deb083605de639e896df83882715ddca25340fa3..76177a4bc8e5f17bc1e062af3a9028d2dfc76dc9 100644
+index 0a1042ce3d384f6a4392a100275c14cb31ba2816..6c87c36039446e04f6c30c23b8fdb9b957dd610d 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -74,7 +74,7 @@ AM_CONDITIONAL([OS400],    [AS_CASE([$host_os],[os400],         [true], [false])
  AM_CONDITIONAL([SUNOS],    [AS_CASE([$host_os],[solaris*],      [true], [false])])
  AM_CONDITIONAL([WINNT],    [AS_CASE([$host_os],[mingw*],        [true], [false])])
  AS_CASE([$host_os],[mingw*], [
--    LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -luser32 -ldbghelp -lole32 -luuid"
+-    LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -luser32 -ldbghelp -lole32 -luuid -lshell32"
 +    LIBS="$LIBS -lws2_32 -lpsapi -liphlpapi -lshell32 -luserenv -luser32"
  ])
  AS_CASE([$host_os], [solaris2.10], [
@@ -54,7 +55,7 @@
  #define SIGWINCH             28
  
 diff --git a/src/win/process.c b/src/win/process.c
-index 3e451e2291d6ed200ec258e874becbbea22bbc27..ed44adc67c6d52785a199206d9ba0357e2d0b045 100644
+index 43059858f3112e7e7185796525697629b72988df..119b46cb3f37122395c172c6e9700d472a2173ed 100644
 --- a/src/win/process.c
 +++ b/src/win/process.c
 @@ -32,9 +32,6 @@
@@ -67,7 +68,7 @@
  
  
  #define SIGKILL         9
-@@ -1197,120 +1194,7 @@ static int uv__kill(HANDLE process_handle, int signum) {
+@@ -1173,120 +1170,7 @@ static int uv__kill(HANDLE process_handle, int signum) {
      return UV_EINVAL;
    }
  
diff --git a/upstream_utils/libuv_patches/0002-Fix-missing-casts.patch b/upstream_utils/libuv_patches/0002-Fix-missing-casts.patch
index 4d9603f..917d375 100644
--- a/upstream_utils/libuv_patches/0002-Fix-missing-casts.patch
+++ b/upstream_utils/libuv_patches/0002-Fix-missing-casts.patch
@@ -1,10 +1,11 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: PJ Reiniger <pj.reiniger@gmail.com>
 Date: Tue, 26 Apr 2022 15:01:25 -0400
-Subject: [PATCH 02/10] Fix missing casts
+Subject: [PATCH 2/9] Fix missing casts
 
 ---
  src/fs-poll.c                  | 10 ++++----
+ src/idna.c                     |  2 +-
  src/inet.c                     | 11 ++++----
  src/strscpy.c                  |  2 +-
  src/thread-common.c            |  2 +-
@@ -30,19 +31,23 @@
  src/unix/proctitle.c           |  2 +-
  src/unix/random-sysctl-linux.c |  2 +-
  src/unix/stream.c              | 31 ++++++++++++-----------
+ src/unix/tcp.c                 |  2 +-
  src/unix/thread.c              |  5 ++--
  src/unix/udp.c                 |  8 +++---
  src/uv-common.c                | 16 ++++++------
  src/win/core.c                 |  8 +++---
+ src/win/dl.c                   |  2 +-
  src/win/fs-event.c             |  4 +--
  src/win/fs-fd-hash-inl.h       |  2 +-
- src/win/fs.c                   | 28 ++++++++++-----------
- src/win/pipe.c                 | 12 ++++-----
- src/win/process.c              | 12 ++++-----
+ src/win/fs.c                   | 38 ++++++++++++++--------------
+ src/win/getaddrinfo.c          | 12 ++++-----
+ src/win/pipe.c                 |  8 +++---
+ src/win/process.c              | 22 ++++++++--------
  src/win/tcp.c                  |  2 +-
  src/win/thread.c               |  4 +--
- src/win/util.c                 | 27 ++++++++++----------
- 38 files changed, 183 insertions(+), 178 deletions(-)
+ src/win/tty.c                  |  6 ++---
+ src/win/util.c                 | 35 +++++++++++++-------------
+ 43 files changed, 207 insertions(+), 202 deletions(-)
 
 diff --git a/src/fs-poll.c b/src/fs-poll.c
 index 1bac1c568e36cadd0b68451926c6f045f88342d2..5a39daed095502b2db34f23fcaf0ab04f31f96ff 100644
@@ -93,6 +98,19 @@
           it != ctx;
           last = it, it = it->previous) {
        assert(last->previous != NULL);
+diff --git a/src/idna.c b/src/idna.c
+index 1c0a60cf3e3becc1badafa394e7c422af7f56833..0c952cf605a88136ed9035f9385f9b1080c30c28 100644
+--- a/src/idna.c
++++ b/src/idna.c
+@@ -477,7 +477,7 @@ int uv_utf16_to_wtf8(const uint16_t* w_source_ptr,
+     return 0;
+ 
+   if (*target_ptr == NULL) {
+-    target = uv__malloc(target_len + 1);
++    target = (char*)uv__malloc(target_len + 1);
+     if (target == NULL) {
+       return UV_ENOMEM;
+     }
 diff --git a/src/inet.c b/src/inet.c
 index cd77496846e90e8b8e61c63c10f498f153344fe5..dd94bea3886ca37945fcad7909d765e3700e3c21 100644
 --- a/src/inet.c
@@ -279,7 +297,7 @@
    if (display_name_key == NULL || *display_name_key == NULL)
      goto out;
 diff --git a/src/unix/darwin.c b/src/unix/darwin.c
-index 90790d701c4327518d17230c5aa69b9a74112e73..9ee5cd8eb9d02fb8b71986c47fe8a686f0983847 100644
+index 5e764a65ee4c71efd61876c70b0e999420f24f61..dc93d236b6b7c6da62dc7aa66cb42ddc125575a2 100644
 --- a/src/unix/darwin.c
 +++ b/src/unix/darwin.c
 @@ -217,7 +217,7 @@ int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) {
@@ -314,10 +332,10 @@
      uv__free(*cpu_infos);
      return UV_ENOMEM;
 diff --git a/src/unix/fs.c b/src/unix/fs.c
-index 6b051c124f2fd9b0f72b41d7d7ba9c715e9686e1..e25d02e54dbe93e4b9c22b0140108c99ae2cb4f7 100644
+index 891306daedcc6a9b493bdfefcdb7d43c7efbb622..bc00c90b07a32a823412b216df6f2d758dbc423b 100644
 --- a/src/unix/fs.c
 +++ b/src/unix/fs.c
-@@ -140,7 +140,7 @@ extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */
+@@ -134,7 +134,7 @@ extern char *mkdtemp(char *template); /* See issue #740 on AIX < 7 */
        size_t new_path_len;                                                    \
        path_len = strlen(path) + 1;                                            \
        new_path_len = strlen(new_path) + 1;                                    \
@@ -326,7 +344,7 @@
        if (req->path == NULL)                                                  \
          return UV_ENOMEM;                                                     \
        req->new_path = req->path + path_len;                                   \
-@@ -568,7 +568,7 @@ static ssize_t uv__fs_scandir(uv_fs_t* req) {
+@@ -496,7 +496,7 @@ static ssize_t uv__fs_scandir(uv_fs_t* req) {
  static int uv__fs_opendir(uv_fs_t* req) {
    uv_dir_t* dir;
  
@@ -335,7 +353,7 @@
    if (dir == NULL)
      goto error;
  
-@@ -592,7 +592,7 @@ static int uv__fs_readdir(uv_fs_t* req) {
+@@ -520,7 +520,7 @@ static int uv__fs_readdir(uv_fs_t* req) {
    unsigned int dirent_idx;
    unsigned int i;
  
@@ -344,7 +362,7 @@
    dirent_idx = 0;
  
    while (dirent_idx < dir->nentries) {
-@@ -634,7 +634,7 @@ error:
+@@ -562,7 +562,7 @@ error:
  static int uv__fs_closedir(uv_fs_t* req) {
    uv_dir_t* dir;
  
@@ -353,7 +371,7 @@
  
    if (dir->dir != NULL) {
      closedir(dir->dir);
-@@ -663,7 +663,7 @@ static int uv__fs_statfs(uv_fs_t* req) {
+@@ -591,7 +591,7 @@ static int uv__fs_statfs(uv_fs_t* req) {
  #endif /* defined(__sun) */
      return -1;
  
@@ -362,7 +380,7 @@
    if (stat_fs == NULL) {
      errno = ENOMEM;
      return -1;
-@@ -727,7 +727,7 @@ static ssize_t uv__fs_readlink(uv_fs_t* req) {
+@@ -655,7 +655,7 @@ static ssize_t uv__fs_readlink(uv_fs_t* req) {
      maxlen = uv__fs_pathmax_size(req->path);
  #endif
  
@@ -371,7 +389,7 @@
  
    if (buf == NULL) {
      errno = ENOMEM;
-@@ -747,7 +747,7 @@ static ssize_t uv__fs_readlink(uv_fs_t* req) {
+@@ -675,7 +675,7 @@ static ssize_t uv__fs_readlink(uv_fs_t* req) {
  
    /* Uncommon case: resize to make room for the trailing nul byte. */
    if (len == maxlen) {
@@ -380,7 +398,7 @@
  
      if (buf == NULL)
        return -1;
-@@ -770,7 +770,7 @@ static ssize_t uv__fs_realpath(uv_fs_t* req) {
+@@ -698,7 +698,7 @@ static ssize_t uv__fs_realpath(uv_fs_t* req) {
    ssize_t len;
  
    len = uv__fs_pathmax_size(req->path);
@@ -389,8 +407,8 @@
  
    if (buf == NULL) {
      errno = ENOMEM;
-@@ -1984,7 +1984,7 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
-   req->nbufs = nbufs;
+@@ -1886,7 +1886,7 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
+ 
    req->bufs = req->bufsml;
    if (nbufs > ARRAY_SIZE(req->bufsml))
 -    req->bufs = uv__malloc(nbufs * sizeof(*bufs));
@@ -398,7 +416,7 @@
  
    if (req->bufs == NULL)
      return UV_ENOMEM;
-@@ -2171,7 +2171,7 @@ int uv_fs_write(uv_loop_t* loop,
+@@ -2071,7 +2071,7 @@ int uv_fs_write(uv_loop_t* loop,
    req->nbufs = nbufs;
    req->bufs = req->bufsml;
    if (nbufs > ARRAY_SIZE(req->bufsml))
@@ -585,10 +603,10 @@
      return UV_ENOMEM;
    }
 diff --git a/src/unix/kqueue.c b/src/unix/kqueue.c
-index b78242d3be4e3cf6b7b998f56dc65213982d4bc7..28e55aae6c613576ede7024a5c73d746e134d865 100644
+index 94ace58680cf391707f68357d7927173cb1db08e..06fbdb24b4adc4adb781d32150d40836fa745531 100644
 --- a/src/unix/kqueue.c
 +++ b/src/unix/kqueue.c
-@@ -299,8 +299,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+@@ -303,8 +303,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
      nevents = 0;
  
      assert(loop->watchers != NULL);
@@ -599,7 +617,7 @@
      for (i = 0; i < nfds; i++) {
        ev = events + i;
        fd = ev->ident;
-@@ -322,7 +322,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+@@ -326,7 +326,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
        /* Skip invalidated events, see uv__platform_invalidate_fd */
        if (fd == -1)
          continue;
@@ -609,10 +627,10 @@
        if (w == NULL) {
          /* File descriptor that we've stopped watching, disarm it. */
 diff --git a/src/unix/linux.c b/src/unix/linux.c
-index 48b9c2c43e104079d3ccb5d830d1d79f891fb1a3..9173850bd158eaf9c41deca38f9ba84762a027a1 100644
+index 8eeb352e6238a9e9557ec4dfc71f192105135cd7..2b8e1d8fe593a181d049aa50ff9edaf6da258a24 100644
 --- a/src/unix/linux.c
 +++ b/src/unix/linux.c
-@@ -456,8 +456,8 @@ static void uv__iou_init(int epollfd,
+@@ -518,8 +518,8 @@ static void uv__iou_init(int epollfd,
    char* sqe;
    int ringfd;
  
@@ -623,7 +641,7 @@
  
    if (!uv__use_io_uring())
      return;
-@@ -496,14 +496,14 @@ static void uv__iou_init(int epollfd,
+@@ -558,14 +558,14 @@ static void uv__iou_init(int epollfd,
    maxlen = sqlen < cqlen ? cqlen : sqlen;
    sqelen = params.sq_entries * sizeof(struct uv__io_uring_sqe);
  
@@ -640,7 +658,7 @@
               sqelen,
               PROT_READ | PROT_WRITE,
               MAP_SHARED | MAP_POPULATE,
-@@ -643,7 +643,7 @@ void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
+@@ -705,7 +705,7 @@ void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
    int i;
  
    lfields = uv__get_internal_fields(loop);
@@ -649,7 +667,7 @@
  
    /* Invalidate events with same file descriptor */
    if (inv != NULL)
-@@ -718,7 +718,7 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+@@ -780,7 +780,7 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
      return NULL;  /* No room in ring buffer. TODO(bnoordhuis) maybe flush it? */
  
    slot = tail & mask;
@@ -658,7 +676,7 @@
    sqe = &sqe[slot];
    memset(sqe, 0, sizeof(*sqe));
    sqe->user_data = (uintptr_t) req;
-@@ -986,7 +986,7 @@ int uv__iou_fs_statx(uv_loop_t* loop,
+@@ -1057,7 +1057,7 @@ int uv__iou_fs_statx(uv_loop_t* loop,
    struct uv__statx* statxbuf;
    struct uv__iou* iou;
  
@@ -667,7 +685,7 @@
    if (statxbuf == NULL)
      return 0;
  
-@@ -1050,7 +1050,7 @@ static void uv__iou_fs_statx_post(uv_fs_t* req) {
+@@ -1121,7 +1121,7 @@ static void uv__iou_fs_statx_post(uv_fs_t* req) {
    uv_stat_t* buf;
  
    buf = &req->statbuf;
@@ -676,7 +694,7 @@
    req->ptr = NULL;
  
    if (req->result == 0) {
-@@ -1079,7 +1079,7 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
+@@ -1150,7 +1150,7 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
    tail = atomic_load_explicit((_Atomic uint32_t*) iou->cqtail,
                                memory_order_acquire);
    mask = iou->cqmask;
@@ -685,7 +703,7 @@
    nevents = 0;
  
    for (i = head; i != tail; i++) {
-@@ -1170,7 +1170,7 @@ static void uv__epoll_ctl_prep(int epollfd,
+@@ -1241,7 +1241,7 @@ static void uv__epoll_ctl_prep(int epollfd,
      pe = &(*events)[slot];
      *pe = *e;
  
@@ -694,7 +712,7 @@
      sqe = &sqe[slot];
  
      memset(sqe, 0, sizeof(*sqe));
-@@ -1226,7 +1226,7 @@ static void uv__epoll_ctl_flush(int epollfd,
+@@ -1297,7 +1297,7 @@ static void uv__epoll_ctl_flush(int epollfd,
    while (*ctl->cqhead != *ctl->cqtail) {
      slot = (*ctl->cqhead)++ & ctl->cqmask;
  
@@ -703,7 +721,7 @@
      cqe = &cqe[slot];
  
      if (cqe->res == 0)
-@@ -1708,7 +1708,7 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
+@@ -1758,7 +1758,7 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
    snprintf(*models, sizeof(*models), "unknown");
    maxcpu = 0;
  
@@ -712,7 +730,7 @@
    if (cpus == NULL)
      return UV_ENOMEM;
  
-@@ -1764,9 +1764,9 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
+@@ -1816,9 +1816,9 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
  
      /* arm64: translate CPU part code to model name. */
      if (*parts) {
@@ -724,7 +742,7 @@
        else
          p += n + 1;
        n = (int) strcspn(p, "\n");
-@@ -1815,7 +1815,7 @@ nocpuinfo:
+@@ -1868,7 +1868,7 @@ nocpuinfo:
    }
  
    size = n * sizeof(**ci) + sizeof(models);
@@ -733,7 +751,7 @@
    *count = 0;
  
    if (*ci == NULL) {
-@@ -1824,7 +1824,7 @@ nocpuinfo:
+@@ -1877,7 +1877,7 @@ nocpuinfo:
    }
  
    *count = n;
@@ -742,7 +760,7 @@
  
    i = 0;
    for (cpu = 0; cpu < maxcpu; cpu++) {
-@@ -1833,19 +1833,19 @@ nocpuinfo:
+@@ -1886,19 +1886,19 @@ nocpuinfo:
  
      c = *cpus + cpu;
  
@@ -766,7 +784,7 @@
      };
    }
  
-@@ -1902,7 +1902,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) {
+@@ -1955,7 +1955,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) {
    }
  
    /* Make sure the memory is initiallized to zero using calloc() */
@@ -775,7 +793,7 @@
    if (!(*addresses)) {
      freeifaddrs(addrs);
      return UV_ENOMEM;
-@@ -2470,12 +2470,12 @@ int uv_fs_event_start(uv_fs_event_t* handle,
+@@ -2523,12 +2523,12 @@ int uv_fs_event_start(uv_fs_event_t* handle,
      goto no_insert;
  
    len = strlen(path) + 1;
@@ -1058,8 +1076,21 @@
      for (i = 0; i < queued_fds->offset; i++)
        uv__close(queued_fds->fds[i]);
      uv__free(handle->queued_fds);
+diff --git a/src/unix/tcp.c b/src/unix/tcp.c
+index a6b53e5913271d0c83e1d7f7e4cb8140f5f3936d..4c4213a4241b51d245146f1a37a371448d57b3b8 100644
+--- a/src/unix/tcp.c
++++ b/src/unix/tcp.c
+@@ -274,7 +274,7 @@ int uv__tcp_connect(uv_connect_t* req,
+     memcpy(&tmp6, addr, sizeof(tmp6));
+     if (tmp6.sin6_scope_id == 0) {
+       tmp6.sin6_scope_id = uv__ipv6_link_local_scope_id();
+-      addr = (void*) &tmp6;
++      addr = (const struct sockaddr*) &tmp6;
+     }
+   }
+ 
 diff --git a/src/unix/thread.c b/src/unix/thread.c
-index 4d6f4b8232ec6dc0bd27258a1315340e3e272ae9..531c6211bb4321e5f11031a0644b4e3ab9174396 100644
+index f05e6fe0f7dd5ac579f6a9d6f93bffb99e1bcbc2..20409541de3cb300504b823472a73bc95fa38f62 100644
 --- a/src/unix/thread.c
 +++ b/src/unix/thread.c
 @@ -168,8 +168,7 @@ int uv_thread_create_ex(uv_thread_t* tid,
@@ -1118,7 +1149,7 @@
    if (req->bufs == NULL) {
      uv__req_unregister(handle->loop, req);
 diff --git a/src/uv-common.c b/src/uv-common.c
-index 916f3f4e00664ab47f94d2a6ee7c6a9ef0461389..c04f93596ab1f730576256d86e216ccb7f258b72 100644
+index 2200fe3f0a41e295acb426f39ccc9f0133994675..69e95801a18104ea910abf86db236d85f62afb66 100644
 --- a/src/uv-common.c
 +++ b/src/uv-common.c
 @@ -54,10 +54,10 @@ static uv__allocator_t uv__allocator = {
@@ -1148,7 +1179,7 @@
  }
  
  void* uv__malloc(size_t size) {
-@@ -688,7 +688,7 @@ void uv__fs_scandir_cleanup(uv_fs_t* req) {
+@@ -691,7 +691,7 @@ void uv__fs_scandir_cleanup(uv_fs_t* req) {
    unsigned int n;
  
    if (req->result >= 0) {
@@ -1157,7 +1188,7 @@
      nbufs = uv__get_nbufs(req);
  
      i = 0;
-@@ -721,7 +721,7 @@ int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) {
+@@ -724,7 +724,7 @@ int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) {
    nbufs = uv__get_nbufs(req);
    assert(nbufs);
  
@@ -1166,7 +1197,7 @@
  
    /* Free previous entity */
    if (*nbufs > 0)
-@@ -786,7 +786,7 @@ void uv__fs_readdir_cleanup(uv_fs_t* req) {
+@@ -789,7 +789,7 @@ void uv__fs_readdir_cleanup(uv_fs_t* req) {
    if (req->ptr == NULL)
      return;
  
@@ -1175,7 +1206,7 @@
    dirents = dir->dirents;
    req->ptr = NULL;
  
-@@ -832,7 +832,7 @@ uv_loop_t* uv_default_loop(void) {
+@@ -835,7 +835,7 @@ uv_loop_t* uv_default_loop(void) {
  uv_loop_t* uv_loop_new(void) {
    uv_loop_t* loop;
  
@@ -1217,8 +1248,21 @@
    if (timer_heap == NULL) {
      err = UV_ENOMEM;
      goto fail_timers_alloc;
+diff --git a/src/win/dl.c b/src/win/dl.c
+index 7880c9595be1f66ea0dcbdbcc4a91ce40577587f..d88400f0e819d74998e13f60f13c67a606dec398 100644
+--- a/src/win/dl.c
++++ b/src/win/dl.c
+@@ -37,7 +37,7 @@ int uv_dlopen(const char* filename, uv_lib_t* lib) {
+     return uv__dlerror(lib, filename, ERROR_NO_UNICODE_TRANSLATION);
+   if ((size_t) r > ARRAY_SIZE(filename_w))
+     return uv__dlerror(lib, filename, ERROR_INSUFFICIENT_BUFFER);
+-  uv_wtf8_to_utf16(filename, filename_w, r);
++  uv_wtf8_to_utf16(filename, (uint16_t*)filename_w, r);
+ 
+   lib->handle = LoadLibraryExW(filename_w, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
+   if (lib->handle == NULL) {
 diff --git a/src/win/fs-event.c b/src/win/fs-event.c
-index 6758c7c78bc1d6a5316a8ae7dc2d1e23cd0f32bc..150467313d576bfe2966b55f3d8cffa23cbb8ea3 100644
+index 4a0ca1f70a22b6342e208124838d6ecf3173f1a8..5a07acfe54efe90cf2ab0bca5b5998a961e72ebd 100644
 --- a/src/win/fs-event.c
 +++ b/src/win/fs-event.c
 @@ -73,7 +73,7 @@ static void uv__relative_path(const WCHAR* filename,
@@ -1230,7 +1274,7 @@
    if (!*relpath)
      uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
    wcsncpy(*relpath, filename + dirlen + 1, relpathlen);
-@@ -242,7 +242,7 @@ int uv_fs_event_start(uv_fs_event_t* handle,
+@@ -229,7 +229,7 @@ int uv_fs_event_start(uv_fs_event_t* handle,
      if (short_path_buffer_len == 0) {
        goto short_path_done;
      }
@@ -1253,28 +1297,53 @@
          uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
        }
 diff --git a/src/win/fs.c b/src/win/fs.c
-index fc209c54f470edaa031009979061cff071cbf66d..328c8f2e0513562b53c948ffea59d0841e14b264 100644
+index 99c8a2bf8bf1244f0db7114c1eaa8bff22564996..d9c2a4f728c7fb491995c6153b2a63a835b206b7 100644
 --- a/src/win/fs.c
 +++ b/src/win/fs.c
-@@ -258,7 +258,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+@@ -280,7 +280,7 @@ INLINE static int fs__readlink_handle(HANDLE handle,
+   }
+ 
+   assert(target_ptr == NULL || *target_ptr == NULL);
+-  return uv_utf16_to_wtf8(w_target, w_target_len, target_ptr, target_len_ptr);
++  return uv_utf16_to_wtf8((const uint16_t*)w_target, w_target_len, target_ptr, target_len_ptr);
+ }
+ 
+ 
+@@ -323,7 +323,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
      return 0;
    }
  
 -  buf = uv__malloc(buf_sz);
-+  buf = (WCHAR *)uv__malloc(buf_sz);
++  buf = (WCHAR*)uv__malloc(buf_sz);
    if (buf == NULL) {
      return ERROR_OUTOFMEMORY;
    }
-@@ -376,7 +376,7 @@ static int fs__wide_to_wtf8(WCHAR* w_source_ptr,
-     return 0;
+@@ -331,7 +331,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+   pos = buf;
  
-   if (*target_ptr == NULL) {
--    target = uv__malloc(target_len + 1);
-+    target = (char *)uv__malloc(target_len + 1);
-     if (target == NULL) {
-       SetLastError(ERROR_OUTOFMEMORY);
-       return -1;
-@@ -1575,7 +1575,7 @@ void fs__scandir(uv_fs_t* req) {
+   if (path != NULL) {
+-    uv_wtf8_to_utf16(path, pos, pathw_len);
++    uv_wtf8_to_utf16(path, (uint16_t*)pos, pathw_len);
+     req->file.pathw = pos;
+     pos += pathw_len;
+   } else {
+@@ -339,7 +339,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+   }
+ 
+   if (new_path != NULL) {
+-    uv_wtf8_to_utf16(new_path, pos, new_pathw_len);
++    uv_wtf8_to_utf16(new_path, (uint16_t*)pos, new_pathw_len);
+     req->fs.info.new_pathw = pos;
+     pos += new_pathw_len;
+   } else {
+@@ -1390,13 +1390,13 @@ void fs__scandir(uv_fs_t* req) {
+         continue;
+ 
+       /* Compute the space required to store the filename as WTF-8. */
+-      wtf8_len = uv_utf16_length_as_wtf8(&info->FileName[0], wchar_len);
++      wtf8_len = uv_utf16_length_as_wtf8((const uint16_t*)&info->FileName[0], wchar_len);
+ 
+       /* Resize the dirent array if needed. */
        if (dirents_used >= dirents_size) {
          size_t new_dirents_size =
              dirents_size == 0 ? dirents_initial_size : dirents_size << 1;
@@ -1283,7 +1352,7 @@
              uv__realloc(dirents, new_dirents_size * sizeof *dirents);
  
          if (new_dirents == NULL)
-@@ -1589,7 +1589,7 @@ void fs__scandir(uv_fs_t* req) {
+@@ -1410,7 +1410,7 @@ void fs__scandir(uv_fs_t* req) {
         * includes room for the first character of the filename, but `utf8_len`
         * doesn't count the NULL terminator at this point.
         */
@@ -1292,7 +1361,16 @@
        if (dirent == NULL)
          goto out_of_memory_error;
  
-@@ -1691,7 +1691,7 @@ void fs__opendir(uv_fs_t* req) {
+@@ -1418,7 +1418,7 @@ void fs__scandir(uv_fs_t* req) {
+ 
+       /* Convert file name to UTF-8. */
+       wtf8 = &dirent->d_name[0];
+-      if (uv_utf16_to_wtf8(&info->FileName[0], wchar_len, &wtf8, &wtf8_len) != 0)
++      if (uv_utf16_to_wtf8((const uint16_t*)&info->FileName[0], wchar_len, &wtf8, &wtf8_len) != 0)
+         goto out_of_memory_error;
+ 
+       /* Fill out the type field. */
+@@ -1512,7 +1512,7 @@ void fs__opendir(uv_fs_t* req) {
      goto error;
    }
  
@@ -1301,7 +1379,7 @@
    if (dir == NULL) {
      SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
      goto error;
-@@ -1706,7 +1706,7 @@ void fs__opendir(uv_fs_t* req) {
+@@ -1527,7 +1527,7 @@ void fs__opendir(uv_fs_t* req) {
    else
      fmt = L"%s\\*";
  
@@ -1310,7 +1388,7 @@
    if (find_path == NULL) {
      SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
      goto error;
-@@ -1743,7 +1743,7 @@ void fs__readdir(uv_fs_t* req) {
+@@ -1564,7 +1564,7 @@ void fs__readdir(uv_fs_t* req) {
    int r;
  
    req->flags |= UV_FS_FREE_PTR;
@@ -1319,7 +1397,7 @@
    dirents = dir->dirents;
    memset(dirents, 0, dir->nentries * sizeof(*dir->dirents));
    find_data = &dir->find_data;
-@@ -1800,7 +1800,7 @@ error:
+@@ -1621,7 +1621,7 @@ error:
  void fs__closedir(uv_fs_t* req) {
    uv_dir_t* dir;
  
@@ -1328,7 +1406,7 @@
    FindClose(dir->dir_handle);
    uv__free(req->ptr);
    SET_REQ_RESULT(req, 0);
-@@ -2791,7 +2791,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
+@@ -2612,7 +2612,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
      return -1;
    }
  
@@ -1337,7 +1415,16 @@
    if (w_realpath_buf == NULL) {
      SetLastError(ERROR_OUTOFMEMORY);
      return -1;
-@@ -2904,7 +2904,7 @@ retry_get_disk_free_space:
+@@ -2645,7 +2645,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
+   }
+ 
+   assert(*realpath_ptr == NULL);
+-  r = uv_utf16_to_wtf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
++  r = uv_utf16_to_wtf8((const uint16_t*)w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
+   uv__free(w_realpath_buf);
+   return r;
+ }
+@@ -2725,7 +2725,7 @@ retry_get_disk_free_space:
      }
  
      len = MAX_PATH + 1;
@@ -1346,7 +1433,7 @@
      if (pathw == NULL) {
        SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
        return;
-@@ -2920,7 +2920,7 @@ retry_get_full_path_name:
+@@ -2741,7 +2741,7 @@ retry_get_full_path_name:
        return;
      } else if (ret > len) {
        len = ret;
@@ -1355,7 +1442,7 @@
        if (pathw == NULL) {
          SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
          return;
-@@ -2936,7 +2936,7 @@ retry_get_full_path_name:
+@@ -2757,7 +2757,7 @@ retry_get_full_path_name:
      uv__free(pathw);
    }
  
@@ -1364,7 +1451,7 @@
    if (stat_fs == NULL) {
      SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
      return;
-@@ -3095,7 +3095,7 @@ int uv_fs_read(uv_loop_t* loop,
+@@ -2916,7 +2916,7 @@ int uv_fs_read(uv_loop_t* loop,
    req->fs.info.nbufs = nbufs;
    req->fs.info.bufs = req->fs.info.bufsml;
    if (nbufs > ARRAY_SIZE(req->fs.info.bufsml))
@@ -1373,7 +1460,7 @@
  
    if (req->fs.info.bufs == NULL) {
      SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
-@@ -3128,7 +3128,7 @@ int uv_fs_write(uv_loop_t* loop,
+@@ -2949,7 +2949,7 @@ int uv_fs_write(uv_loop_t* loop,
    req->fs.info.nbufs = nbufs;
    req->fs.info.bufs = req->fs.info.bufsml;
    if (nbufs > ARRAY_SIZE(req->fs.info.bufsml))
@@ -1382,38 +1469,64 @@
  
    if (req->fs.info.bufs == NULL) {
      SET_REQ_UV_ERROR(req, UV_ENOMEM, ERROR_OUTOFMEMORY);
+diff --git a/src/win/getaddrinfo.c b/src/win/getaddrinfo.c
+index 8b8406ada8e7434e291b2e50caf4ed7f36613fa0..5bc63d8e19411b967a2acf5c24b34b9b17323ccc 100644
+--- a/src/win/getaddrinfo.c
++++ b/src/win/getaddrinfo.c
+@@ -132,7 +132,7 @@ static void uv__getaddrinfo_done(struct uv__work* w, int status) {
+       addrinfo_len += addrinfo_struct_len +
+           ALIGNED_SIZE(addrinfow_ptr->ai_addrlen);
+       if (addrinfow_ptr->ai_canonname != NULL) {
+-        name_len = uv_utf16_length_as_wtf8(addrinfow_ptr->ai_canonname, -1);
++        name_len = uv_utf16_length_as_wtf8((const uint16_t*)addrinfow_ptr->ai_canonname, -1);
+         if (name_len < 0) {
+           req->retcode = name_len;
+           goto complete;
+@@ -281,9 +281,9 @@ int uv_getaddrinfo(uv_loop_t* loop,
+   }
+ 
+   /* allocate memory for inputs, and partition it as needed */
+-  alloc_ptr = uv__malloc(ALIGNED_SIZE(nodesize * sizeof(WCHAR)) +
+-                         ALIGNED_SIZE(servicesize * sizeof(WCHAR)) +
+-                         hintssize);
++  alloc_ptr = (char*)uv__malloc(ALIGNED_SIZE(nodesize * sizeof(WCHAR)) +
++                                ALIGNED_SIZE(servicesize * sizeof(WCHAR)) +
++                                hintssize);
+   if (!alloc_ptr)
+     return UV_ENOMEM;
+ 
+@@ -294,7 +294,7 @@ int uv_getaddrinfo(uv_loop_t* loop,
+    * request. The node here has been converted to ascii. */
+   if (node != NULL) {
+     req->node = (WCHAR*) alloc_ptr;
+-    uv_wtf8_to_utf16(node, (WCHAR*) alloc_ptr, nodesize);
++    uv_wtf8_to_utf16(node, (uint16_t*) alloc_ptr, nodesize);
+     alloc_ptr += ALIGNED_SIZE(nodesize * sizeof(WCHAR));
+   } else {
+     req->node = NULL;
+@@ -304,7 +304,7 @@ int uv_getaddrinfo(uv_loop_t* loop,
+    * the req. */
+   if (service != NULL) {
+     req->service = (WCHAR*) alloc_ptr;
+-    uv_wtf8_to_utf16(service, (WCHAR*) alloc_ptr, servicesize);
++    uv_wtf8_to_utf16(service, (uint16_t*) alloc_ptr, servicesize);
+     alloc_ptr += ALIGNED_SIZE(servicesize * sizeof(WCHAR));
+   } else {
+     req->service = NULL;
 diff --git a/src/win/pipe.c b/src/win/pipe.c
-index f0cac3822564e14052feb5e1934f54c57c78160d..c1739efe82b8755999145860b4da6b50c73518a2 100644
+index cec72ff750b5a17e139fd85080ccbdfc3c71d8c0..0f045a873073cf9b07feb457ea199990df521e5f 100644
 --- a/src/win/pipe.c
 +++ b/src/win/pipe.c
-@@ -756,7 +756,7 @@ int uv_pipe_bind2(uv_pipe_t* handle,
- 
-   /* Convert name to UTF16. */
-   nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR);
--  handle->name = uv__malloc(nameSize);
-+  handle->name = (WCHAR*)uv__malloc(nameSize);
-   if (!handle->name) {
-     uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
-   }
-@@ -906,7 +906,7 @@ int uv_pipe_connect2(uv_connect_t* req,
- 
-   /* Convert name to UTF16. */
-   nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR);
--  handle->name = uv__malloc(nameSize);
-+  handle->name = (WCHAR*)uv__malloc(nameSize);
-   if (!handle->name) {
-     uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
-   }
-@@ -924,7 +924,7 @@ int uv_pipe_connect2(uv_connect_t* req,
-   pipeHandle = open_named_pipe(handle->name, &duplex_flags);
+@@ -899,7 +899,7 @@ int uv_pipe_connect2(uv_connect_t* req,
    if (pipeHandle == INVALID_HANDLE_VALUE) {
      if (GetLastError() == ERROR_PIPE_BUSY) {
+       nameSize = (wcslen(handle->name) + 1) * sizeof(WCHAR);
 -      req->u.connect.name = uv__malloc(nameSize);
 +      req->u.connect.name = (WCHAR *)uv__malloc(nameSize);
        if (!req->u.connect.name) {
          uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc");
        }
-@@ -1528,7 +1528,7 @@ static int uv__build_coalesced_write_req(uv_write_t* user_req,
+@@ -1503,7 +1503,7 @@ static int uv__build_coalesced_write_req(uv_write_t* user_req,
                         data_length;                  /* (c) */
  
    /* Allocate buffer. */
@@ -1422,7 +1535,7 @@
    if (heap_buffer == NULL)
      return ERROR_NOT_ENOUGH_MEMORY; /* Maps to UV_ENOMEM. */
  
-@@ -1777,7 +1777,7 @@ int uv__pipe_write_ipc(uv_loop_t* loop,
+@@ -1752,7 +1752,7 @@ int uv__pipe_write_ipc(uv_loop_t* loop,
      bufs = stack_bufs;
    } else {
      /* Use heap-allocated buffer array. */
@@ -1431,7 +1544,7 @@
      if (bufs == NULL)
        return ERROR_NOT_ENOUGH_MEMORY; /* Maps to UV_ENOMEM. */
    }
-@@ -2514,7 +2514,7 @@ static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size)
+@@ -2449,7 +2449,7 @@ static int uv__pipe_getname(const uv_pipe_t* handle, char* buffer, size_t* size)
                                        FileNameInformation);
    if (nt_status == STATUS_BUFFER_OVERFLOW) {
      name_size = sizeof(*name_info) + tmp_name_info.FileNameLength;
@@ -1439,12 +1552,38 @@
 +    name_info = (FILE_NAME_INFORMATION*)uv__malloc(name_size);
      if (!name_info) {
        *size = 0;
-       err = UV_ENOMEM;
+       return UV_ENOMEM;
 diff --git a/src/win/process.c b/src/win/process.c
-index ed44adc67c6d52785a199206d9ba0357e2d0b045..b383e8b405db56d413985b38df216d09c58ec4a0 100644
+index 119b46cb3f37122395c172c6e9700d472a2173ed..0103004c565bb09b7b9c150e874f9c68486ab26c 100644
 --- a/src/win/process.c
 +++ b/src/win/process.c
-@@ -615,8 +615,8 @@ error:
+@@ -543,14 +543,14 @@ int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) {
+   dst_len = dst_len * 2 + arg_count * 2;
+ 
+   /* Allocate buffer for the final command line. */
+-  dst = uv__malloc(dst_len * sizeof(WCHAR));
++  dst = (WCHAR*)uv__malloc(dst_len * sizeof(WCHAR));
+   if (dst == NULL) {
+     err = UV_ENOMEM;
+     goto error;
+   }
+ 
+   /* Allocate temporary working buffer. */
+-  temp_buffer = uv__malloc(temp_buffer_len * sizeof(WCHAR));
++  temp_buffer = (WCHAR*)uv__malloc(temp_buffer_len * sizeof(WCHAR));
+   if (temp_buffer == NULL) {
+     err = UV_ENOMEM;
+     goto error;
+@@ -564,7 +564,7 @@ int make_program_args(char** args, int verbatim_arguments, WCHAR** dst_ptr) {
+     arg_len = uv_wtf8_length_as_utf16(*arg);
+     assert(arg_len > 0);
+     assert(temp_buffer_len >= (size_t) arg_len);
+-    uv_wtf8_to_utf16(*arg, temp_buffer, arg_len);
++    uv_wtf8_to_utf16(*arg, (uint16_t*)temp_buffer, arg_len);
+ 
+     if (verbatim_arguments) {
+       /* Copy verbatim. */
+@@ -592,8 +592,8 @@ error:
  
  
  int env_strncmp(const wchar_t* a, int na, const wchar_t* b) {
@@ -1455,7 +1594,7 @@
    wchar_t* A;
    wchar_t* B;
    int nb;
-@@ -633,8 +633,8 @@ int env_strncmp(const wchar_t* a, int na, const wchar_t* b) {
+@@ -610,8 +610,8 @@ int env_strncmp(const wchar_t* a, int na, const wchar_t* b) {
    assert(b_eq);
    nb = b_eq - b;
  
@@ -1466,16 +1605,30 @@
  
    r = LCMapStringW(LOCALE_INVARIANT, LCMAP_UPPERCASE, a, na, A, na);
    assert(r==na);
-@@ -717,7 +717,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
+@@ -684,11 +684,11 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
+   }
+ 
+   /* second pass: copy to UTF-16 environment block */
+-  dst_copy = uv__malloc(env_len * sizeof(WCHAR));
++  dst_copy = (WCHAR*)uv__malloc(env_len * sizeof(WCHAR));
    if (dst_copy == NULL && env_len > 0) {
-     return ERROR_OUTOFMEMORY;
+     return UV_ENOMEM;
    }
 -  env_copy = alloca(env_block_count * sizeof(WCHAR*));
 +  env_copy = (WCHAR**)alloca(env_block_count * sizeof(WCHAR*));
  
    ptr = dst_copy;
    ptr_copy = env_copy;
-@@ -771,7 +771,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
+@@ -698,7 +698,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
+       len = uv_wtf8_length_as_utf16(*env);
+       assert(len > 0);
+       assert((size_t) len <= env_len - (ptr - dst_copy));
+-      uv_wtf8_to_utf16(*env, ptr, len);
++      uv_wtf8_to_utf16(*env, (uint16_t*)ptr, len);
+       *ptr_copy++ = ptr;
+       ptr += len;
+     }
+@@ -736,7 +736,7 @@ int make_program_env(char* env_block[], WCHAR** dst_ptr) {
    }
  
    /* final pass: copy, in sort order, and inserting required variables */
@@ -1483,7 +1636,7 @@
 +  dst = (WCHAR*)uv__malloc((1+env_len) * sizeof(WCHAR));
    if (!dst) {
      uv__free(dst_copy);
-     return ERROR_OUTOFMEMORY;
+     return UV_ENOMEM;
 diff --git a/src/win/tcp.c b/src/win/tcp.c
 index 187f36e2a61c870b0d16e17e9d4a9e1161ba8851..d8da4d941a51b0625fc0c072342ec4edf74c0ea3 100644
 --- a/src/win/tcp.c
@@ -1519,11 +1672,51 @@
    if (ctx == NULL)
      return UV_ENOMEM;
  
+diff --git a/src/win/tty.c b/src/win/tty.c
+index ac836930d6f3a185d57ba59fb42c817496aa0fdf..3aacaaf0b514ba71755dc51f1bd7263de5cbc308 100644
+--- a/src/win/tty.c
++++ b/src/win/tty.c
+@@ -528,7 +528,7 @@ static DWORD CALLBACK uv_tty_line_read_thread(void* data) {
+ 
+   if (read_console_success) {
+     read_bytes = bytes;
+-    uv_utf16_to_wtf8(utf16,
++    uv_utf16_to_wtf8((const uint16_t*)utf16,
+                      read_chars,
+                      &handle->tty.rd.read_line_buffer.base,
+                      &read_bytes);
+@@ -827,7 +827,7 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
+           WCHAR utf16_buffer[2];
+           utf16_buffer[0] = handle->tty.rd.last_utf16_high_surrogate;
+           utf16_buffer[1] = KEV.uChar.UnicodeChar;
+-          if (uv_utf16_to_wtf8(utf16_buffer,
++          if (uv_utf16_to_wtf8((const uint16_t*)utf16_buffer,
+                                2,
+                                &last_key_buf,
+                                &char_len))
+@@ -835,7 +835,7 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
+           handle->tty.rd.last_utf16_high_surrogate = 0;
+         } else {
+           /* Single UTF-16 character */
+-          if (uv_utf16_to_wtf8(&KEV.uChar.UnicodeChar,
++          if (uv_utf16_to_wtf8((const uint16_t*)&KEV.uChar.UnicodeChar,
+                                1,
+                                &last_key_buf,
+                                &char_len))
 diff --git a/src/win/util.c b/src/win/util.c
-index f6ec79cd57b5010ed5fd6829d952bcdacc8b7671..1cfd7b2caf0d4ad1a6a66df9406c21f4e2b69b04 100644
+index 91d88a54fb24a613df45d7915c345b6764dd6ffd..5fbc70f52952f90b36fb22ee03ec7f70e6ed5954 100644
 --- a/src/win/util.c
 +++ b/src/win/util.c
-@@ -160,7 +160,7 @@ static int uv__cwd(WCHAR** buf, DWORD *len) {
+@@ -124,7 +124,7 @@ int uv_exepath(char* buffer, size_t* size_ptr) {
+ 
+   /* Convert to UTF-8 */
+   utf8_len = *size_ptr - 1; /* Reserve space for NUL */
+-  err = uv_utf16_to_wtf8(utf16_buffer, utf16_len, &buffer, &utf8_len);
++  err = uv_utf16_to_wtf8((const uint16_t*)utf16_buffer, utf16_len, &buffer, &utf8_len);
+   if (err == UV_ENOBUFS) {
+     utf8_len = *size_ptr - 1;
+     err = 0;
+@@ -152,7 +152,7 @@ static int uv__cwd(WCHAR** buf, DWORD *len) {
        return uv_translate_sys_error(GetLastError());
  
      /* |t| is the size of the buffer _including_ nul. */
@@ -1532,16 +1725,7 @@
      if (p == NULL)
        return UV_ENOMEM;
  
-@@ -265,7 +265,7 @@ int uv_chdir(const char* dir) {
-   if (utf16_len == 0) {
-     return uv_translate_sys_error(GetLastError());
-   }
--  utf16_buffer = uv__malloc(utf16_len * sizeof(WCHAR));
-+  utf16_buffer = (WCHAR*)uv__malloc(utf16_len * sizeof(WCHAR));
-   if (utf16_buffer == NULL) {
-     return UV_ENOMEM;
-   }
-@@ -623,14 +623,14 @@ int uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) {
+@@ -548,14 +548,14 @@ int uv_cpu_info(uv_cpu_info_t** cpu_infos_ptr, int* cpu_count_ptr) {
    GetSystemInfo(&system_info);
    cpu_count = system_info.dwNumberOfProcessors;
  
@@ -1558,7 +1742,7 @@
    if (sppi == NULL) {
      err = ERROR_OUTOFMEMORY;
      goto error;
-@@ -774,7 +774,8 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
+@@ -699,7 +699,8 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
        case ERROR_BUFFER_OVERFLOW:
          /* This happens when win_address_buf is NULL or too small to hold all
           * adapters. */
@@ -1568,7 +1752,7 @@
          if (win_address_buf == NULL)
            return UV_ENOMEM;
  
-@@ -782,7 +783,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
+@@ -707,7 +708,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
  
        case ERROR_NO_DATA: {
          /* No adapters were found. */
@@ -1577,7 +1761,16 @@
          if (uv_address_buf == NULL)
            return UV_ENOMEM;
  
-@@ -859,7 +860,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
+@@ -758,7 +759,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
+       continue;
+ 
+     /* Compute the size of the interface name. */
+-    name_size = uv_utf16_length_as_wtf8(adapter->FriendlyName, -1);
++    name_size = uv_utf16_length_as_wtf8((const uint16_t*)adapter->FriendlyName, -1);
+     uv_address_buf_size += name_size + 1;
+ 
+     /* Count the number of addresses associated with this interface, and
+@@ -773,7 +774,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses_ptr,
    }
  
    /* Allocate space to store interface data plus adapter names. */
@@ -1586,7 +1779,7 @@
    if (uv_address_buf == NULL) {
      uv__free(win_address_buf);
      return UV_ENOMEM;
-@@ -1074,7 +1075,7 @@ int uv_os_tmpdir(char* buffer, size_t* size) {
+@@ -982,7 +983,7 @@ int uv_os_tmpdir(char* buffer, size_t* size) {
    }
    /* Include space for terminating null char. */
    len += 1;
@@ -1595,25 +1788,46 @@
    if (path == NULL) {
      return UV_ENOMEM;
    }
-@@ -1153,7 +1154,7 @@ int uv__convert_utf16_to_utf8(const WCHAR* utf16, int utf16len, char** utf8) {
-   /* Allocate the destination buffer adding an extra byte for the terminating
-    * NULL. If utf16len is not -1 WideCharToMultiByte will not add it, so
-    * we do it ourselves always, just in case. */
--  *utf8 = uv__malloc(bufsize + 1);
-+  *utf8 = (char*)uv__malloc(bufsize + 1);
+@@ -1019,7 +1020,7 @@ int uv__convert_utf16_to_utf8(const WCHAR* utf16, size_t utf16len, char** utf8)
+     return UV_EINVAL;
  
-   if (*utf8 == NULL)
-     return UV_ENOMEM;
-@@ -1201,7 +1202,7 @@ int uv__convert_utf8_to_utf16(const char* utf8, int utf8len, WCHAR** utf16) {
-   /* Allocate the destination buffer adding an extra byte for the terminating
-    * NULL. If utf8len is not -1 MultiByteToWideChar will not add it, so
-    * we do it ourselves always, just in case. */
--  *utf16 = uv__malloc(sizeof(WCHAR) * (bufsize + 1));
-+  *utf16 = (WCHAR*)uv__malloc(sizeof(WCHAR) * (bufsize + 1));
+    *utf8 = NULL;
+-   return uv_utf16_to_wtf8(utf16, utf16len, utf8, &utf8_len);
++   return uv_utf16_to_wtf8((const uint16_t*)utf16, utf16len, utf8, &utf8_len);
+ }
+ 
+ 
+@@ -1039,13 +1040,13 @@ int uv__convert_utf8_to_utf16(const char* utf8, WCHAR** utf16) {
+     return UV__EINVAL;
+ 
+   /* Allocate the destination buffer. */
+-  *utf16 = uv__malloc(sizeof(WCHAR) * bufsize);
++  *utf16 = (WCHAR*)uv__malloc(sizeof(WCHAR) * bufsize);
  
    if (*utf16 == NULL)
      return UV_ENOMEM;
-@@ -1242,7 +1243,7 @@ static int uv__getpwuid_r(uv_passwd_t* pwd) {
+ 
+   /* Convert to UTF-16 */
+-  uv_wtf8_to_utf16(utf8, *utf16, bufsize);
++  uv_wtf8_to_utf16(utf8, (uint16_t*)*utf16, bufsize);
+ 
+   return 0;
+ }
+@@ -1065,11 +1066,11 @@ int uv__copy_utf16_to_utf8(const WCHAR* utf16buffer, size_t utf16len, char* utf8
+     return UV_EINVAL;
+ 
+   if (*size == 0) {
+-    *size = uv_utf16_length_as_wtf8(utf16buffer, utf16len);
++    *size = uv_utf16_length_as_wtf8((const uint16_t*)utf16buffer, utf16len);
+     r = UV_ENOBUFS;
+   } else {
+     *size -= 1; /* Reserve space for NUL. */
+-    r = uv_utf16_to_wtf8(utf16buffer, utf16len, &utf8, size);
++    r = uv_utf16_to_wtf8((const uint16_t*)utf16buffer, utf16len, &utf8, size);
+   }
+   if (r == UV_ENOBUFS)
+     *size += 1; /* Add space for NUL. */
+@@ -1099,7 +1100,7 @@ static int uv__getpwuid_r(uv_passwd_t* pwd) {
      return uv_translate_sys_error(r);
    }
  
@@ -1622,7 +1836,7 @@
    if (path == NULL) {
      CloseHandle(token);
      return UV_ENOMEM;
-@@ -1323,7 +1324,7 @@ int uv_os_environ(uv_env_item_t** envitems, int* count) {
+@@ -1180,7 +1181,7 @@ int uv_os_environ(uv_env_item_t** envitems, int* count) {
  
    for (penv = env, i = 0; *penv != L'\0'; penv += wcslen(penv) + 1, i++);
  
@@ -1631,7 +1845,7 @@
    if (*envitems == NULL) {
      FreeEnvironmentStringsW(env);
      return UV_ENOMEM;
-@@ -1413,7 +1414,7 @@ int uv_os_getenv(const char* name, char* buffer, size_t* size) {
+@@ -1269,7 +1270,7 @@ int uv_os_getenv(const char* name, char* buffer, size_t* size) {
        uv__free(var);
  
      varlen = 1 + len;
diff --git a/upstream_utils/libuv_patches/0003-Fix-warnings.patch b/upstream_utils/libuv_patches/0003-Fix-warnings.patch
index cbf5c70..1fdfff8 100644
--- a/upstream_utils/libuv_patches/0003-Fix-warnings.patch
+++ b/upstream_utils/libuv_patches/0003-Fix-warnings.patch
@@ -1,16 +1,15 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: PJ Reiniger <pj.reiniger@gmail.com>
 Date: Tue, 26 Apr 2022 15:09:43 -0400
-Subject: [PATCH 03/10] Fix warnings
+Subject: [PATCH 3/9] Fix warnings
 
 ---
  include/uv/win.h    |  5 +++++
- src/idna.c          |  2 +-
+ src/idna.c          |  4 ++--
  src/inet.c          |  4 ++++
  src/threadpool.c    |  4 ++++
  src/unix/core.c     | 12 ++++++++++--
  src/unix/internal.h |  4 ++--
- src/unix/linux.c    | 15 ++++++++++++---
  src/unix/thread.c   |  6 ------
  src/uv-common.c     |  8 ++++++++
  src/win/fs-event.c  |  2 ++
@@ -19,7 +18,7 @@
  src/win/process.c   |  2 ++
  src/win/thread.c    |  4 ++--
  src/win/tty.c       |  2 ++
- 15 files changed, 58 insertions(+), 16 deletions(-)
+ 14 files changed, 47 insertions(+), 14 deletions(-)
 
 diff --git a/include/uv/win.h b/include/uv/win.h
 index eb74776978340a4910194bae35a9da6493e8c0a6..6d0afe69e7dd4caf4c9459e548fe75cf0c51b501 100644
@@ -43,10 +42,10 @@
    typedef PVOID CONDITION_VARIABLE, *PCONDITION_VARIABLE;
  #endif
 diff --git a/src/idna.c b/src/idna.c
-index 93d982ca018f2d39d9c0ffab07998c2c637029eb..36a39a089019fb4c2a35ec84516658c392eec0a3 100644
+index 0c952cf605a88136ed9035f9385f9b1080c30c28..fe60fb59bea59986a612cfa1747802b0636482d9 100644
 --- a/src/idna.c
 +++ b/src/idna.c
-@@ -106,7 +106,7 @@ static int uv__idna_toascii_label(const char* s, const char* se,
+@@ -153,7 +153,7 @@ static int uv__idna_toascii_label(const char* s, const char* se,
                                    char** d, char* de) {
    static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz0123456789";
    const char* ss;
@@ -55,6 +54,15 @@
    unsigned h;
    unsigned k;
    unsigned n;
+@@ -382,7 +382,7 @@ ssize_t uv_wtf8_length_as_utf16(const char* source_ptr) {
+ 
+ void uv_wtf8_to_utf16(const char* source_ptr,
+                       uint16_t* w_target,
+-                      size_t w_target_len) {
++                      [[maybe_unused]] size_t w_target_len) {
+   int32_t code_point;
+ 
+   do {
 diff --git a/src/inet.c b/src/inet.c
 index dd94bea3886ca37945fcad7909d765e3700e3c21..71c9e5b774d64d505e6c6d6ed2637178b8532d4d 100644
 --- a/src/inet.c
@@ -132,48 +140,8 @@
  
    s = strrchr(path, '/');
    if (s == NULL)
-diff --git a/src/unix/linux.c b/src/unix/linux.c
-index 9173850bd158eaf9c41deca38f9ba84762a027a1..157443792f1216c83b4221c3810d17c81c5913c4 100644
---- a/src/unix/linux.c
-+++ b/src/unix/linux.c
-@@ -1718,7 +1718,11 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
-     return UV__ERR(errno);
-   }
- 
--  fgets(buf, sizeof(buf), fp);  /* Skip first line. */
-+  /* Skip first line. */
-+  if (!fgets(buf, sizeof(buf), fp)) {
-+    uv__free(cpus);
-+    return UV__ERR(errno);
-+  }
- 
-   for (;;) {
-     memset(&t, 0, sizeof(t));
-@@ -1729,7 +1733,10 @@ int uv_cpu_info(uv_cpu_info_t** ci, int* count) {
-     if (n != 7)
-       break;
- 
--    fgets(buf, sizeof(buf), fp);  /* Skip rest of line. */
-+    /* Skip rest of line. */
-+    if (!fgets(buf, sizeof(buf), fp)) {
-+      break;
-+    }
- 
-     if (cpu >= ARRAY_SIZE(*cpus))
-       continue;
-@@ -1809,7 +1816,9 @@ nocpuinfo:
-     if (fp == NULL)
-       continue;
- 
--    fscanf(fp, "%llu", &(*cpus)[cpu].freq);
-+    if (0 > fscanf(fp, "%llu", &(*cpus)[cpu].freq)) {
-+      (*cpus)[cpu].freq = 0llu;
-+    }
-     fclose(fp);
-     fp = NULL;
-   }
 diff --git a/src/unix/thread.c b/src/unix/thread.c
-index 531c6211bb4321e5f11031a0644b4e3ab9174396..f8600947e3e7df015c4302af4feee740707b2c46 100644
+index 20409541de3cb300504b823472a73bc95fa38f62..688c042e1aedf379264900c29758c8b01a4a90ed 100644
 --- a/src/unix/thread.c
 +++ b/src/unix/thread.c
 @@ -137,12 +137,6 @@ int uv_thread_create_ex(uv_thread_t* tid,
@@ -190,10 +158,10 @@
        params->flags & UV_THREAD_HAS_STACK_SIZE ? params->stack_size : 0;
  
 diff --git a/src/uv-common.c b/src/uv-common.c
-index c04f93596ab1f730576256d86e216ccb7f258b72..cd10b36b4a393e325ea03b93eb9897193ca9800b 100644
+index 69e95801a18104ea910abf86db236d85f62afb66..49126e50f07bac16d198775454b731f40630d1d1 100644
 --- a/src/uv-common.c
 +++ b/src/uv-common.c
-@@ -799,6 +799,10 @@ void uv__fs_readdir_cleanup(uv_fs_t* req) {
+@@ -802,6 +802,10 @@ void uv__fs_readdir_cleanup(uv_fs_t* req) {
    }
  }
  
@@ -204,7 +172,7 @@
  
  int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) {
    va_list ap;
-@@ -812,6 +816,10 @@ int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) {
+@@ -815,6 +819,10 @@ int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) {
    return err;
  }
  
@@ -216,7 +184,7 @@
  static uv_loop_t default_loop_struct;
  static uv_loop_t* default_loop_ptr;
 diff --git a/src/win/fs-event.c b/src/win/fs-event.c
-index 150467313d576bfe2966b55f3d8cffa23cbb8ea3..3244a4e4320d7ce98f226b49b2634c65de89c213 100644
+index 5a07acfe54efe90cf2ab0bca5b5998a961e72ebd..381220bf241d9572ff64576cf25700d9746d2806 100644
 --- a/src/win/fs-event.c
 +++ b/src/win/fs-event.c
 @@ -19,6 +19,8 @@
@@ -229,7 +197,7 @@
  #include <errno.h>
  #include <stdio.h>
 diff --git a/src/win/fs.c b/src/win/fs.c
-index 328c8f2e0513562b53c948ffea59d0841e14b264..565c05fff13c2e6e74091c1da7b31636d7fd370d 100644
+index d9c2a4f728c7fb491995c6153b2a63a835b206b7..7df1df2b9ba23c0ecb96e82a6cfcaae824826b69 100644
 --- a/src/win/fs.c
 +++ b/src/win/fs.c
 @@ -19,6 +19,8 @@
@@ -242,7 +210,7 @@
  #include <stdlib.h>
  #include <direct.h>
 diff --git a/src/win/pipe.c b/src/win/pipe.c
-index c1739efe82b8755999145860b4da6b50c73518a2..258d6a684c67f154096a25e7226f1a7d08b93d5b 100644
+index 0f045a873073cf9b07feb457ea199990df521e5f..b2348bd0430aada98ff10313f6f926ea2f1c4491 100644
 --- a/src/win/pipe.c
 +++ b/src/win/pipe.c
 @@ -19,6 +19,8 @@
@@ -255,7 +223,7 @@
  #include <io.h>
  #include <stdio.h>
 diff --git a/src/win/process.c b/src/win/process.c
-index b383e8b405db56d413985b38df216d09c58ec4a0..2b1b46259959867482079962d0ea44246a42e7cb 100644
+index 0103004c565bb09b7b9c150e874f9c68486ab26c..eeb0f6a984bb0f61b956cb4b907fbfdb3b4ac7e2 100644
 --- a/src/win/process.c
 +++ b/src/win/process.c
 @@ -19,6 +19,8 @@
@@ -283,7 +251,7 @@
          return UV_EINVAL;
      }
 diff --git a/src/win/tty.c b/src/win/tty.c
-index 7e1f15544b177382a774300f832bc982d85bd62b..abbe1315883257d6825b794344dcd4cba9514097 100644
+index 3aacaaf0b514ba71755dc51f1bd7263de5cbc308..c90995afb6166a7cab0a267f5eb513705ce05148 100644
 --- a/src/win/tty.c
 +++ b/src/win/tty.c
 @@ -19,6 +19,8 @@
diff --git a/upstream_utils/libuv_patches/0004-Preprocessor-cleanup.patch b/upstream_utils/libuv_patches/0004-Preprocessor-cleanup.patch
index c95b28a..2b887e6 100644
--- a/upstream_utils/libuv_patches/0004-Preprocessor-cleanup.patch
+++ b/upstream_utils/libuv_patches/0004-Preprocessor-cleanup.patch
@@ -1,7 +1,7 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: PJ Reiniger <pj.reiniger@gmail.com>
 Date: Tue, 26 Apr 2022 15:19:14 -0400
-Subject: [PATCH 04/10] Preprocessor cleanup
+Subject: [PATCH 4/9] Preprocessor cleanup
 
 ---
  include/uv.h        | 12 ------------
@@ -14,7 +14,7 @@
  7 files changed, 14 insertions(+), 20 deletions(-)
 
 diff --git a/include/uv.h b/include/uv.h
-index 02397dd0fdd43d51f86c0dde9a62046702f12bdb..d5342b0d52232bbf83825948cc6bc09e5d74a4c7 100644
+index 5642101c10c351a602a195d3b74027b53bf641d2..aff06cb7f4352eb4fcf93c938f09a789318bddc3 100644
 --- a/include/uv.h
 +++ b/include/uv.h
 @@ -23,9 +23,6 @@
@@ -44,7 +44,7 @@
  UV_EXTERN uv_handle_type uv_guess_handle(uv_file file);
  
  enum {
-@@ -1906,7 +1897,4 @@ UV_EXTERN void uv_loop_set_data(uv_loop_t*, void* data);
+@@ -1918,7 +1909,4 @@ void uv_wtf8_to_utf16(const char* wtf8,
  #undef UV_LOOP_PRIVATE_PLATFORM_FIELDS
  #undef UV__ERR
  
@@ -85,19 +85,19 @@
  
  /* core */
 diff --git a/src/win/fs.c b/src/win/fs.c
-index 565c05fff13c2e6e74091c1da7b31636d7fd370d..f415ddc2c39d09eea317fc857777acce1ce7d13e 100644
+index 7df1df2b9ba23c0ecb96e82a6cfcaae824826b69..26ba539936786902af5830c2811594292815d2d7 100644
 --- a/src/win/fs.c
 +++ b/src/win/fs.c
-@@ -40,6 +40,7 @@
- 
- #include <winioctl.h>
+@@ -43,6 +43,7 @@
+ #include "handle-inl.h"
+ #include "fs-fd-hash-inl.h"
  
 +#pragma comment(lib, "Advapi32.lib")
  
  #define UV_FS_FREE_PATHS         0x0002
  #define UV_FS_FREE_PTR           0x0008
 diff --git a/src/win/tty.c b/src/win/tty.c
-index abbe1315883257d6825b794344dcd4cba9514097..9bb3d9e830c901122da5e521e0c6b032dfd5044c 100644
+index c90995afb6166a7cab0a267f5eb513705ce05148..7adf3cd3ba81a9c41064f4ef2af01667092f27d1 100644
 --- a/src/win/tty.c
 +++ b/src/win/tty.c
 @@ -37,6 +37,8 @@
@@ -110,7 +110,7 @@
  # define InterlockedOr _InterlockedOr
  #endif
 diff --git a/src/win/util.c b/src/win/util.c
-index 1cfd7b2caf0d4ad1a6a66df9406c21f4e2b69b04..af18cfa6c106c5de0996e4fff9b4127aaa3b576b 100644
+index 5fbc70f52952f90b36fb22ee03ec7f70e6ed5954..f505cfad4987768fa6470ca27612312c2ba0729d 100644
 --- a/src/win/util.c
 +++ b/src/win/util.c
 @@ -64,12 +64,20 @@
diff --git a/upstream_utils/libuv_patches/0005-Cleanup-problematic-language.patch b/upstream_utils/libuv_patches/0005-Cleanup-problematic-language.patch
index e016c2e..fbe7efe 100644
--- a/upstream_utils/libuv_patches/0005-Cleanup-problematic-language.patch
+++ b/upstream_utils/libuv_patches/0005-Cleanup-problematic-language.patch
@@ -1,7 +1,7 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: PJ Reiniger <pj.reiniger@gmail.com>
 Date: Tue, 26 Apr 2022 15:24:47 -0400
-Subject: [PATCH 05/10] Cleanup problematic language
+Subject: [PATCH 5/9] Cleanup problematic language
 
 ---
  src/unix/tty.c | 21 +++++++++++----------
diff --git a/upstream_utils/libuv_patches/0007-Fix-Win32-warning-suppression-pragma.patch b/upstream_utils/libuv_patches/0006-Fix-Win32-warning-suppression-pragma.patch
similarity index 72%
rename from upstream_utils/libuv_patches/0007-Fix-Win32-warning-suppression-pragma.patch
rename to upstream_utils/libuv_patches/0006-Fix-Win32-warning-suppression-pragma.patch
index 5ef597c..fe00159 100644
--- a/upstream_utils/libuv_patches/0007-Fix-Win32-warning-suppression-pragma.patch
+++ b/upstream_utils/libuv_patches/0006-Fix-Win32-warning-suppression-pragma.patch
@@ -1,17 +1,17 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Tyler Veness <calcmogul@gmail.com>
 Date: Sat, 21 May 2022 22:58:06 -0700
-Subject: [PATCH 07/10] Fix Win32 warning suppression pragma
+Subject: [PATCH 6/9] Fix Win32 warning suppression pragma
 
 ---
  src/win/util.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/src/win/util.c b/src/win/util.c
-index af18cfa6c106c5de0996e4fff9b4127aaa3b576b..9324992ec521cc3496e3e9304e600963a3f20897 100644
+index f505cfad4987768fa6470ca27612312c2ba0729d..8828857db76a54d6e184c7f5714a091e92eba8ed 100644
 --- a/src/win/util.c
 +++ b/src/win/util.c
-@@ -1692,7 +1692,7 @@ int uv_os_uname(uv_utsname_t* buffer) {
+@@ -1502,7 +1502,7 @@ int uv_os_uname(uv_utsname_t* buffer) {
    } else {
      /* Silence GetVersionEx() deprecation warning. */
      #ifdef _MSC_VER
diff --git a/upstream_utils/libuv_patches/0006-Style-comments-cleanup.patch b/upstream_utils/libuv_patches/0006-Style-comments-cleanup.patch
deleted file mode 100644
index d4aa9a2..0000000
--- a/upstream_utils/libuv_patches/0006-Style-comments-cleanup.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: PJ Reiniger <pj.reiniger@gmail.com>
-Date: Tue, 26 Apr 2022 15:28:52 -0400
-Subject: [PATCH 06/10] Style / comments cleanup
-
----
- src/fs-poll.c     | 1 +
- src/unix/core.c   | 1 +
- src/uv-common.c   | 1 +
- src/win/process.c | 1 -
- src/win/winsock.c | 1 +
- 5 files changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/fs-poll.c b/src/fs-poll.c
-index 5a39daed095502b2db34f23fcaf0ab04f31f96ff..1a7ca70d62c71f6eaef2b9985796cc46a6438869 100644
---- a/src/fs-poll.c
-+++ b/src/fs-poll.c
-@@ -34,6 +34,7 @@
- #include <stdlib.h>
- #include <string.h>
- 
-+
- struct poll_ctx {
-   uv_fs_poll_t* parent_handle;
-   int busy_polling;
-diff --git a/src/unix/core.c b/src/unix/core.c
-index 268fc9652f437eb0d0cda2a9e0b06b9e91eb9742..f53adc156a7c454c492abaeac29d90be436785fc 100644
---- a/src/unix/core.c
-+++ b/src/unix/core.c
-@@ -575,6 +575,7 @@ int uv__accept(int sockfd) {
-   return peerfd;
- }
- 
-+
- #if defined(__APPLE__)
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdollar-in-identifier-extension"
-diff --git a/src/uv-common.c b/src/uv-common.c
-index cd10b36b4a393e325ea03b93eb9897193ca9800b..bfcc3ef10f4fd7763221638947da6e02e7a17c33 100644
---- a/src/uv-common.c
-+++ b/src/uv-common.c
-@@ -799,6 +799,7 @@ void uv__fs_readdir_cleanup(uv_fs_t* req) {
-   }
- }
- 
-+
- #ifdef __clang__
- # pragma clang diagnostic push
- # pragma clang diagnostic ignored "-Wvarargs"
-diff --git a/src/win/process.c b/src/win/process.c
-index 2b1b46259959867482079962d0ea44246a42e7cb..18816d3b1e8c863f8ca74fe0104de1aecd0ae3fa 100644
---- a/src/win/process.c
-+++ b/src/win/process.c
-@@ -35,7 +35,6 @@
- #include "handle-inl.h"
- #include "req-inl.h"
- 
--
- #define SIGKILL         9
- 
- 
-diff --git a/src/win/winsock.c b/src/win/winsock.c
-index 7843e9f13321c32419cebaacde82d30f471e11d7..cda82bc33c2c6e3dbfa9d978b5b40476228452bd 100644
---- a/src/win/winsock.c
-+++ b/src/win/winsock.c
-@@ -25,6 +25,7 @@
- #include "uv.h"
- #include "internal.h"
- 
-+
- #pragma comment(lib, "Ws2_32.lib")
- 
- /* Whether there are any non-IFS LSPs stacked on TCP */
diff --git a/upstream_utils/libuv_patches/0008-Use-C-atomics.patch b/upstream_utils/libuv_patches/0007-Use-C-atomics.patch
similarity index 75%
rename from upstream_utils/libuv_patches/0008-Use-C-atomics.patch
rename to upstream_utils/libuv_patches/0007-Use-C-atomics.patch
index ffdc588..7fea790 100644
--- a/upstream_utils/libuv_patches/0008-Use-C-atomics.patch
+++ b/upstream_utils/libuv_patches/0007-Use-C-atomics.patch
@@ -1,18 +1,18 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Tyler Veness <calcmogul@gmail.com>
 Date: Thu, 13 Jul 2023 22:13:47 -0700
-Subject: [PATCH 08/10] Use C++ atomics
+Subject: [PATCH 7/9] Use C++ atomics
 
 ---
  src/unix/async.c  | 25 +++++++++++++------------
  src/unix/core.c   |  3 ++-
- src/unix/fs.c     | 32 +++++++++++++++++---------------
+ src/unix/fs.c     | 20 +++++++++++---------
  src/unix/kqueue.c | 10 ++++++----
  src/unix/linux.c  | 45 +++++++++++++++++++++++----------------------
  src/unix/tty.c    |  5 +++--
  src/uv-common.c   |  2 +-
  src/uv-common.h   |  8 +++-----
- 8 files changed, 68 insertions(+), 62 deletions(-)
+ 8 files changed, 62 insertions(+), 56 deletions(-)
 
 diff --git a/src/unix/async.c b/src/unix/async.c
 index 0ff2669e30a628dbb2df9e28ba14b38cf14114e5..fef4ae93343edc0341179a1c4739dcd831ef6e26 100644
@@ -91,7 +91,7 @@
        continue;
  
 diff --git a/src/unix/core.c b/src/unix/core.c
-index f53adc156a7c454c492abaeac29d90be436785fc..ce7fd2cdfdd53410dc694450bd56dffc26ff4792 100644
+index 268fc9652f437eb0d0cda2a9e0b06b9e91eb9742..1a52716792d2dbbb71a4ebdd2255173b7447979b 100644
 --- a/src/unix/core.c
 +++ b/src/unix/core.c
 @@ -45,6 +45,7 @@
@@ -112,19 +112,19 @@
  
    iovmax = atomic_load_explicit(&iovmax_cached, memory_order_relaxed);
 diff --git a/src/unix/fs.c b/src/unix/fs.c
-index e25d02e54dbe93e4b9c22b0140108c99ae2cb4f7..aba190a9c0240fba0128fb7fbc5d92d7fa86214b 100644
+index bc00c90b07a32a823412b216df6f2d758dbc423b..afdf0c6e592c69961b1286a87b61e62601331763 100644
 --- a/src/unix/fs.c
 +++ b/src/unix/fs.c
-@@ -46,6 +46,8 @@
+@@ -45,6 +45,8 @@
  #include <fcntl.h>
  #include <poll.h>
  
 +#include <atomic>
 +
- #if defined(__DragonFly__)        ||                                      \
-     defined(__FreeBSD__)          ||                                      \
-     defined(__OpenBSD__)          ||                                      \
-@@ -313,7 +315,7 @@ static int uv__fs_mkstemp(uv_fs_t* req) {
+ #if defined(__linux__)
+ # include <sys/sendfile.h>
+ #endif
+@@ -307,7 +309,7 @@ static int uv__fs_mkstemp(uv_fs_t* req) {
    static uv_once_t once = UV_ONCE_INIT;
    int r;
  #ifdef O_CLOEXEC
@@ -133,7 +133,7 @@
  #endif
    static const char pattern[] = "XXXXXX";
    static const size_t pattern_size = sizeof(pattern) - 1;
-@@ -338,7 +340,7 @@ static int uv__fs_mkstemp(uv_fs_t* req) {
+@@ -332,7 +334,7 @@ static int uv__fs_mkstemp(uv_fs_t* req) {
    uv_once(&once, uv__mkostemp_initonce);
  
  #ifdef O_CLOEXEC
@@ -142,7 +142,7 @@
        uv__mkostemp != NULL) {
      r = uv__mkostemp(path, O_CLOEXEC);
  
-@@ -352,7 +354,7 @@ static int uv__fs_mkstemp(uv_fs_t* req) {
+@@ -346,7 +348,7 @@ static int uv__fs_mkstemp(uv_fs_t* req) {
  
      /* We set the static variable so that next calls don't even
         try to use mkostemp. */
@@ -151,34 +151,7 @@
    }
  #endif  /* O_CLOEXEC */
  
-@@ -462,7 +464,7 @@ static ssize_t uv__fs_preadv(uv_file fd,
- 
- static ssize_t uv__fs_read(uv_fs_t* req) {
- #if TRY_PREADV
--  static _Atomic int no_preadv;
-+  static std::atomic<int> no_preadv;
- #endif
-   unsigned int iovmax;
-   ssize_t result;
-@@ -486,7 +488,7 @@ static ssize_t uv__fs_read(uv_fs_t* req) {
-     result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);
- #else
- # if TRY_PREADV
--    if (atomic_load_explicit(&no_preadv, memory_order_relaxed)) retry:
-+    if (atomic_load_explicit(&no_preadv, std::memory_order_relaxed)) retry:
- # endif
-     {
-       result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off);
-@@ -498,7 +500,7 @@ static ssize_t uv__fs_read(uv_fs_t* req) {
-                       req->nbufs,
-                       req->off);
-       if (result == -1 && errno == ENOSYS) {
--        atomic_store_explicit(&no_preadv, 1, memory_order_relaxed);
-+        atomic_store_explicit(&no_preadv, 1, std::memory_order_relaxed);
-         goto retry;
-       }
-     }
-@@ -939,10 +941,10 @@ static int uv__is_cifs_or_smb(int fd) {
+@@ -867,10 +869,10 @@ static int uv__is_cifs_or_smb(int fd) {
  
  static ssize_t uv__fs_try_copy_file_range(int in_fd, off_t* off,
                                            int out_fd, size_t len) {
@@ -191,7 +164,7 @@
      errno = ENOSYS;
      return -1;
    }
-@@ -961,7 +963,7 @@ static ssize_t uv__fs_try_copy_file_range(int in_fd, off_t* off,
+@@ -889,7 +891,7 @@ static ssize_t uv__fs_try_copy_file_range(int in_fd, off_t* off,
        errno = ENOSYS;  /* Use fallback. */
      break;
    case ENOSYS:
@@ -200,34 +173,7 @@
      break;
    case EPERM:
      /* It's been reported that CIFS spuriously fails.
-@@ -1162,7 +1164,7 @@ static ssize_t uv__fs_lutime(uv_fs_t* req) {
- 
- static ssize_t uv__fs_write(uv_fs_t* req) {
- #if TRY_PREADV
--  static _Atomic int no_pwritev;
-+  static std::atomic<int> no_pwritev;
- #endif
-   ssize_t r;
- 
-@@ -1191,7 +1193,7 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
-     r = pwritev(req->file, (struct iovec*) req->bufs, req->nbufs, req->off);
- #else
- # if TRY_PREADV
--    if (atomic_load_explicit(&no_pwritev, memory_order_relaxed)) retry:
-+    if (atomic_load_explicit(&no_pwritev, std::memory_order_relaxed)) retry:
- # endif
-     {
-       r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
-@@ -1203,7 +1205,7 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
-                   req->nbufs,
-                   req->off);
-       if (r == -1 && errno == ENOSYS) {
--        atomic_store_explicit(&no_pwritev, 1, memory_order_relaxed);
-+        atomic_store_explicit(&no_pwritev, 1, std::memory_order_relaxed);
-         goto retry;
-       }
-     }
-@@ -1483,14 +1485,14 @@ static int uv__fs_statx(int fd,
+@@ -1380,14 +1382,14 @@ static int uv__fs_statx(int fd,
                          uv_stat_t* buf) {
    STATIC_ASSERT(UV_ENOSYS != -1);
  #ifdef __linux__
@@ -244,7 +190,7 @@
      return UV_ENOSYS;
  
    dirfd = AT_FDCWD;
-@@ -1524,7 +1526,7 @@ static int uv__fs_statx(int fd,
+@@ -1421,7 +1423,7 @@ static int uv__fs_statx(int fd,
       * implemented, rc might return 1 with 0 set as the error code in which
       * case we return ENOSYS.
       */
@@ -254,10 +200,10 @@
    }
  
 diff --git a/src/unix/kqueue.c b/src/unix/kqueue.c
-index 28e55aae6c613576ede7024a5c73d746e134d865..ffe0f9191cc7b0c233447db358077d8814e0217e 100644
+index 06fbdb24b4adc4adb781d32150d40836fa745531..939a42696778741f9184be29dcea7c858736d181 100644
 --- a/src/unix/kqueue.c
 +++ b/src/unix/kqueue.c
-@@ -34,6 +34,8 @@
+@@ -37,6 +37,8 @@
  #include <fcntl.h>
  #include <time.h>
  
@@ -266,7 +212,7 @@
  /*
   * Required on
   * - Until at least FreeBSD 11.0
-@@ -60,7 +62,7 @@ int uv__kqueue_init(uv_loop_t* loop) {
+@@ -63,7 +65,7 @@ int uv__kqueue_init(uv_loop_t* loop) {
  
  
  #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
@@ -275,7 +221,7 @@
  #endif
  
  int uv__io_fork(uv_loop_t* loop) {
-@@ -84,7 +86,7 @@ int uv__io_fork(uv_loop_t* loop) {
+@@ -87,7 +89,7 @@ int uv__io_fork(uv_loop_t* loop) {
      */
      atomic_store_explicit(&uv__has_forked_with_cfrunloop,
                            1,
@@ -284,7 +230,7 @@
      uv__free(loop->cf_state);
      loop->cf_state = NULL;
    }
-@@ -541,7 +543,7 @@ int uv_fs_event_start(uv_fs_event_t* handle,
+@@ -555,7 +557,7 @@ int uv_fs_event_start(uv_fs_event_t* handle,
      goto fallback;
  
    if (0 == atomic_load_explicit(&uv__has_forked_with_cfrunloop,
@@ -293,7 +239,7 @@
      int r;
      /* The fallback fd is no longer needed */
      uv__close_nocheckstdio(fd);
-@@ -577,7 +579,7 @@ int uv_fs_event_stop(uv_fs_event_t* handle) {
+@@ -591,7 +593,7 @@ int uv_fs_event_stop(uv_fs_event_t* handle) {
  
  #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
    if (0 == atomic_load_explicit(&uv__has_forked_with_cfrunloop,
@@ -303,7 +249,7 @@
        r = uv__fsevents_close(handle);
  #endif
 diff --git a/src/unix/linux.c b/src/unix/linux.c
-index 157443792f1216c83b4221c3810d17c81c5913c4..e3dfb186dc531e5c8197a81681c00d693e0913c6 100644
+index 2b8e1d8fe593a181d049aa50ff9edaf6da258a24..b23d88bd824843eebc3b439e5a18e6f796a747be 100644
 --- a/src/unix/linux.c
 +++ b/src/unix/linux.c
 @@ -27,7 +27,6 @@
@@ -314,7 +260,7 @@
  #include <stddef.h>  /* offsetof */
  #include <stdint.h>
  #include <stdio.h>
-@@ -133,6 +132,8 @@
+@@ -139,6 +138,8 @@
  # include <netpacket/packet.h>
  #endif /* HAVE_IFADDRS_H */
  
@@ -323,7 +269,7 @@
  enum {
    UV__IORING_SETUP_SQPOLL = 2u,
  };
-@@ -311,14 +312,14 @@ static struct watcher_root* uv__inotify_watchers(uv_loop_t* loop) {
+@@ -317,7 +318,7 @@ static struct watcher_root* uv__inotify_watchers(uv_loop_t* loop) {
  
  
  unsigned uv__kernel_version(void) {
@@ -332,25 +278,26 @@
    struct utsname u;
    unsigned version;
    unsigned major;
-   unsigned minor;
-   unsigned patch;
+@@ -326,7 +327,7 @@ unsigned uv__kernel_version(void) {
+   char v_sig[256];
+   char* needle;
  
 -  version = atomic_load_explicit(&cached_version, memory_order_relaxed);
 +  version = std::atomic_load_explicit(&cached_version, std::memory_order_relaxed);
    if (version != 0)
      return version;
  
-@@ -329,7 +330,7 @@ unsigned uv__kernel_version(void) {
-     return 0;
+@@ -382,7 +383,7 @@ unsigned uv__kernel_version(void) {
  
+ calculate_version:
    version = major * 65536 + minor * 256 + patch;
 -  atomic_store_explicit(&cached_version, version, memory_order_relaxed);
 +  std::atomic_store_explicit(&cached_version, version, std::memory_order_relaxed);
  
    return version;
  }
-@@ -424,16 +425,16 @@ static int uv__use_io_uring(void) {
-   return 0;  /* Possibly available but blocked by seccomp. */
+@@ -480,11 +481,11 @@ static int uv__use_io_uring(void) {
+   return 0;  /* All 32 bits kernels appear buggy. */
  #else
    /* Ternary: unknown=0, yes=1, no=-1 */
 -  static _Atomic int use_io_uring;
@@ -362,14 +309,17 @@
 +  use = std::atomic_load_explicit(&use_io_uring, std::memory_order_relaxed);
  
    if (use == 0) {
-     val = getenv("UV_USE_IO_URING");
-     use = val == NULL || atoi(val) ? 1 : -1;
+     /* Older kernels have a bug where the sqpoll thread uses 100% CPU. */
+@@ -495,7 +496,7 @@ static int uv__use_io_uring(void) {
+     if (val != NULL)
+       use = atoi(val) ? 1 : -1;
+ 
 -    atomic_store_explicit(&use_io_uring, use, memory_order_relaxed);
 +    std::atomic_store_explicit(&use_io_uring, use, std::memory_order_relaxed);
    }
  
    return use > 0;
-@@ -709,8 +710,8 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+@@ -771,8 +772,8 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
    if (iou->ringfd == -1)
      return NULL;
  
@@ -380,7 +330,7 @@
    tail = *iou->sqtail;
    mask = iou->sqmask;
  
-@@ -739,12 +740,12 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+@@ -801,12 +802,12 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
  static void uv__iou_submit(struct uv__iou* iou) {
    uint32_t flags;
  
@@ -397,7 +347,7 @@
  
    if (flags & UV__IORING_SQ_NEED_WAKEUP)
      if (uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_SQ_WAKEUP))
-@@ -1076,8 +1077,8 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
+@@ -1147,8 +1148,8 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
    int rc;
  
    head = *iou->cqhead;
@@ -408,7 +358,7 @@
    mask = iou->cqmask;
    cqe = (uv__io_uring_cqe*)iou->cqe;
    nevents = 0;
-@@ -1109,15 +1110,15 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
+@@ -1180,15 +1181,15 @@ static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
      nevents++;
    }
  
@@ -428,7 +378,7 @@
  
    if (flags & UV__IORING_SQ_CQ_OVERFLOW) {
      do
-@@ -1531,7 +1532,7 @@ update_timeout:
+@@ -1581,7 +1582,7 @@ update_timeout:
  }
  
  uint64_t uv__hrtime(uv_clocktype_t type) {
@@ -437,7 +387,7 @@
    struct timespec t;
    clock_t clock_id;
  
-@@ -1547,7 +1548,7 @@ uint64_t uv__hrtime(uv_clocktype_t type) {
+@@ -1597,7 +1598,7 @@ uint64_t uv__hrtime(uv_clocktype_t type) {
    if (type != UV_CLOCK_FAST)
      goto done;
  
@@ -446,7 +396,7 @@
    if (clock_id != -1)
      goto done;
  
-@@ -1556,7 +1557,7 @@ uint64_t uv__hrtime(uv_clocktype_t type) {
+@@ -1606,7 +1607,7 @@ uint64_t uv__hrtime(uv_clocktype_t type) {
      if (t.tv_nsec <= 1 * 1000 * 1000)
        clock_id = CLOCK_MONOTONIC_COARSE;
  
@@ -486,10 +436,10 @@
  int uv__tcsetattr(int fd, int how, const struct termios *term) {
    int rc;
 diff --git a/src/uv-common.c b/src/uv-common.c
-index bfcc3ef10f4fd7763221638947da6e02e7a17c33..5c6d84155408ae4f7c3c6ff9b48bd09ccd16a92e 100644
+index 49126e50f07bac16d198775454b731f40630d1d1..1ce25c24d6c046f7aaeaa52dcfc4fafa5a738650 100644
 --- a/src/uv-common.c
 +++ b/src/uv-common.c
-@@ -951,7 +951,7 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) {
+@@ -953,7 +953,7 @@ void uv_free_cpu_info(uv_cpu_info_t* cpu_infos, int count) {
  __attribute__((destructor))
  #endif
  void uv_library_shutdown(void) {
diff --git a/upstream_utils/libuv_patches/0009-Remove-static-from-array-indices.patch b/upstream_utils/libuv_patches/0008-Remove-static-from-array-indices.patch
similarity index 80%
rename from upstream_utils/libuv_patches/0009-Remove-static-from-array-indices.patch
rename to upstream_utils/libuv_patches/0008-Remove-static-from-array-indices.patch
index f95fc5f..0b7ab19 100644
--- a/upstream_utils/libuv_patches/0009-Remove-static-from-array-indices.patch
+++ b/upstream_utils/libuv_patches/0008-Remove-static-from-array-indices.patch
@@ -1,17 +1,17 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Tyler Veness <calcmogul@gmail.com>
 Date: Thu, 13 Jul 2023 23:30:58 -0700
-Subject: [PATCH 09/10] Remove static from array indices
+Subject: [PATCH 8/9] Remove static from array indices
 
 ---
  src/unix/linux.c | 12 ++++++------
  1 file changed, 6 insertions(+), 6 deletions(-)
 
 diff --git a/src/unix/linux.c b/src/unix/linux.c
-index e3dfb186dc531e5c8197a81681c00d693e0913c6..d365b623a0a25228f0c6acf1fa14a5c7a9f1efbf 100644
+index b23d88bd824843eebc3b439e5a18e6f796a747be..95a2fe2b42895626f207f740bdccfe938915d836 100644
 --- a/src/unix/linux.c
 +++ b/src/unix/linux.c
-@@ -2060,7 +2060,7 @@ static uint64_t uv__read_uint64(const char* filename) {
+@@ -2104,7 +2104,7 @@ static uint64_t uv__read_uint64(const char* filename) {
   * finds the location and length of the memory controller mount path.
   * This disregards the leading / for easy concatenation of paths.
   * Returns NULL if the memory controller wasn't found. */
@@ -20,7 +20,7 @@
                                                  int* n) {
    char* p;
  
-@@ -2081,7 +2081,7 @@ static char* uv__cgroup1_find_memory_controller(char buf[static 1024],
+@@ -2125,7 +2125,7 @@ static char* uv__cgroup1_find_memory_controller(char buf[static 1024],
    return p;
  }
  
@@ -29,7 +29,7 @@
                                            uint64_t* max) {
    char filename[4097];
    char* p;
-@@ -2121,7 +2121,7 @@ update_limits:
+@@ -2165,7 +2165,7 @@ update_limits:
      *max = UINT64_MAX;
  }
  
@@ -38,7 +38,7 @@
                                            uint64_t* max) {
    char filename[4097];
    char* p;
-@@ -2138,7 +2138,7 @@ static void uv__get_cgroup2_memory_limits(char buf[static 1024], uint64_t* high,
+@@ -2182,7 +2182,7 @@ static void uv__get_cgroup2_memory_limits(char buf[static 1024], uint64_t* high,
    *high = uv__read_uint64(filename);
  }
  
@@ -47,7 +47,7 @@
    uint64_t high;
    uint64_t max;
  
-@@ -2164,7 +2164,7 @@ uint64_t uv_get_constrained_memory(void) {
+@@ -2208,7 +2208,7 @@ uint64_t uv_get_constrained_memory(void) {
  }
  
  
@@ -56,7 +56,7 @@
    char filename[4097];
    uint64_t current;
    char* p;
-@@ -2188,7 +2188,7 @@ static uint64_t uv__get_cgroup1_current_memory(char buf[static 1024]) {
+@@ -2232,7 +2232,7 @@ static uint64_t uv__get_cgroup1_current_memory(char buf[static 1024]) {
    return uv__read_uint64("/sys/fs/cgroup/memory/memory.usage_in_bytes");
  }
  
diff --git a/upstream_utils/libuv_patches/0010-Add-pragmas-for-missing-libraries-and-set-_WIN32_WIN.patch b/upstream_utils/libuv_patches/0009-Add-pragmas-for-missing-libraries-and-set-_WIN32_WIN.patch
similarity index 86%
rename from upstream_utils/libuv_patches/0010-Add-pragmas-for-missing-libraries-and-set-_WIN32_WIN.patch
rename to upstream_utils/libuv_patches/0009-Add-pragmas-for-missing-libraries-and-set-_WIN32_WIN.patch
index 07d02f5..07407f1 100644
--- a/upstream_utils/libuv_patches/0010-Add-pragmas-for-missing-libraries-and-set-_WIN32_WIN.patch
+++ b/upstream_utils/libuv_patches/0009-Add-pragmas-for-missing-libraries-and-set-_WIN32_WIN.patch
@@ -1,8 +1,8 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Tyler Veness <calcmogul@gmail.com>
 Date: Fri, 14 Jul 2023 16:40:18 -0700
-Subject: [PATCH 10/10] Add pragmas for missing libraries and set _WIN32_WINNT
- to Windows 10
+Subject: [PATCH 9/9] Add pragmas for missing libraries and set _WIN32_WINNT to
+ Windows 10
 
 This makes GetSystemTimePreciseAsFileTime() available.
 
@@ -27,7 +27,7 @@
  
  #if !defined(_SSIZE_T_) && !defined(_SSIZE_T_DEFINED)
 diff --git a/src/win/util.c b/src/win/util.c
-index 9324992ec521cc3496e3e9304e600963a3f20897..4b76417fcbac2480725471740c037deb859e17ca 100644
+index 8828857db76a54d6e184c7f5714a091e92eba8ed..14295c41342b6dda16f39c5c548a6cc8269bfa0b 100644
 --- a/src/win/util.c
 +++ b/src/win/util.c
 @@ -73,7 +73,9 @@ static char *process_title;