66 lines
1.8 KiB
Diff

Description: uv_os_uname is not available in libuv 1.24.1, restore node 10.15.2 way
Last-Update: 2019-09-05
Author: Jérémy Lal <kapouer@melix.org>
Forwarded: not-needed
--- a/src/node_os.cc
+++ b/src/node_os.cc
@@ -103,16 +103,44 @@
static void GetOSRelease(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
- uv_utsname_t info;
- int err = uv_os_uname(&info);
+ const char* rval;
- if (err != 0) {
+#ifdef __POSIX__
+ struct utsname info;
+ if (uname(&info) < 0) {
CHECK_GE(args.Length(), 1);
- env->CollectUVExceptionInfo(args[args.Length() - 1], err, "uv_os_uname");
+ env->CollectExceptionInfo(args[args.Length() - 1], errno, "uname");
return args.GetReturnValue().SetUndefined();
}
+# ifdef _AIX
+ char release[256];
+ snprintf(release, sizeof(release),
+ "%s.%s", info.version, info.release);
+ rval = release;
+# else
+ rval = info.release;
+# endif
+#else // Windows
+ char release[256];
+ OSVERSIONINFOW info;
- args.GetReturnValue().Set(OneByteString(env->isolate(), info.release));
+ info.dwOSVersionInfoSize = sizeof(info);
+
+ // Don't complain that GetVersionEx is deprecated; there is no alternative.
+ #pragma warning(suppress : 4996)
+ if (GetVersionExW(&info) == 0)
+ return;
+
+ snprintf(release,
+ sizeof(release),
+ "%d.%d.%d",
+ static_cast<int>(info.dwMajorVersion),
+ static_cast<int>(info.dwMinorVersion),
+ static_cast<int>(info.dwBuildNumber));
+ rval = release;
+#endif // __POSIX__
+
+ args.GetReturnValue().Set(OneByteString(env->isolate(), rval));
}
--- a/test/parallel/test-dgram-address.js
+++ b/test/parallel/test-dgram-address.js
@@ -77,5 +77,5 @@
assert.throws(() => {
socket.address();
- }, /^Error: getsockname EBADF$/);
+ }, /^Error: getsockname EINVAL$/);
}