| 200 | } hb_system_info; |
| 201 | |
| 202 | static void init_system_info() |
| 203 | { |
| 204 | if (hb_system_info.name != NULL) |
| 205 | { |
| 206 | return; |
| 207 | } |
| 208 | |
| 209 | #if defined(SYS_DARWIN) |
| 210 | char buf[256]; |
| 211 | size_t buflen = sizeof(buf); |
| 212 | |
| 213 | if (sysctlbyname("kern.osproductversion", &buf, &buflen, NULL, 0) == 0) |
| 214 | { |
| 215 | hb_system_info.version = strdup(buf); |
| 216 | } |
| 217 | |
| 218 | buflen = sizeof(buf); |
| 219 | if (sysctlbyname("kern.osversion", &buf, &buflen, NULL, 0) == 0) |
| 220 | { |
| 221 | hb_system_info.build = strdup(buf); |
| 222 | } |
| 223 | |
| 224 | hb_system_info.name = "macOS"; |
| 225 | #elif defined(SYS_LINUX) || defined(SYS_FREEBSD) || defined(SYS_NETBSD) || defined(SYS_OPENBSD) |
| 226 | struct utsname uts; |
| 227 | if (uname(&uts) == 0) |
| 228 | { |
| 229 | hb_system_info.name = strdup(uts.sysname); |
| 230 | hb_system_info.version = strdup(uts.release); |
| 231 | hb_system_info.build = strdup(uts.version); |
| 232 | } |
| 233 | #elif defined(SYS_MINGW) |
| 234 | NTSYSAPI NTSTATUS RtlGetVersion(PRTL_OSVERSIONINFOW); |
| 235 | |
| 236 | OSVERSIONINFOW vi = {0}; |
| 237 | vi.dwOSVersionInfoSize = sizeof(vi); |
| 238 | char buf[32]; |
| 239 | |
| 240 | if (RtlGetVersion(&vi) == 0) |
| 241 | { |
| 242 | snprintf(buf, sizeof(buf), "%lu.%lu", vi.dwMajorVersion, vi.dwMinorVersion); |
| 243 | hb_system_info.version = strdup(buf); |
| 244 | |
| 245 | snprintf(buf, sizeof(buf), "%lu", vi.dwBuildNumber); |
| 246 | hb_system_info.build = strdup(buf); |
| 247 | } |
| 248 | |
| 249 | hb_system_info.name = "Windows"; |
| 250 | #else |
| 251 | hb_system_info.name = NULL; |
| 252 | hb_system_info.version = NULL; |
| 253 | hb_system_info.build = NULL; |
| 254 | #endif |
| 255 | } |
| 256 | |
| 257 | const char * hb_get_system_name() |
| 258 | { |
no outgoing calls
no test coverage detected