66 lines
1.8 KiB
Diff
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$/);
|
|
}
|