1/* 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2005-2009 Oracle. All rights reserved. 5 * 6 * $Id$ 7 */ 8 9#include "bench.h" 10 11#define UNAMEFILE "NODENAME" 12 13static int write_info __P((FILE *)); 14 15int 16b_uname() 17{ 18 FILE *fp; 19 int ret; 20 21 if ((fp = fopen(UNAMEFILE, "w")) == NULL) 22 goto file_err; 23 24 ret = write_info(fp); 25 26 if (fclose(fp) != 0) { 27file_err: fprintf(stderr, 28 "%s: %s: %s\n", progname, UNAMEFILE, strerror(errno)); 29 return (1); 30 } 31 32 return (ret); 33} 34 35#ifdef DB_WIN32 36static int 37write_info(fp) 38 FILE *fp; 39{ 40 OSVERSIONINFO osver; 41 SYSTEM_INFO sysinfo; 42 char *p; 43 44#ifdef DB_WINCE 45 p = "WinCE"; 46#else 47 { 48 DWORD len; 49 char buf[1024]; 50 51 len = sizeof(buf) - 1; 52 GetComputerName(buf, &len); 53 p = buf; 54 } 55#endif 56 fprintf(fp, "<p>%s, ", p); 57 58 GetSystemInfo(&sysinfo); 59 switch (sysinfo.wProcessorArchitecture) { 60 case PROCESSOR_ARCHITECTURE_ALPHA: 61 p = "alpha"; 62 break; 63 case PROCESSOR_ARCHITECTURE_INTEL: 64 p = "x86"; 65 break; 66 case PROCESSOR_ARCHITECTURE_MIPS: 67 p = "mips"; 68 break; 69 case PROCESSOR_ARCHITECTURE_PPC: 70 p = "ppc"; 71 break; 72 default: 73 p = "unknown"; 74 break; 75 } 76 fprintf(fp, "%s<br>\n", p); 77 memset(&osver, 0, sizeof(osver)); 78 osver.dwOSVersionInfoSize = sizeof(osver); 79 GetVersionEx(&osver); 80 switch (osver.dwPlatformId) { 81 case VER_PLATFORM_WIN32_NT: /* NT, Windows 2000 or Windows XP */ 82 if (osver.dwMajorVersion == 4) 83 p = "Windows NT4x"; 84 else if (osver.dwMajorVersion <= 3) 85 p = "Windows NT3x"; 86 else if (osver.dwMajorVersion == 5 && osver.dwMinorVersion < 1) 87 p = "Windows 2000"; 88 else if (osver.dwMajorVersion >= 5) 89 p = "Windows XP"; 90 else 91 p = "unknown"; 92 break; 93 case VER_PLATFORM_WIN32_WINDOWS: /* Win95, Win98 or WinME */ 94 if ((osver.dwMajorVersion > 4) || 95 ((osver.dwMajorVersion == 4) && (osver.dwMinorVersion > 0))) { 96 if (osver.dwMinorVersion >= 90) 97 p = "Windows ME"; 98 else 99 p = "Windows 98"; 100 } else 101 p = "Windows 95"; 102 break; 103 case VER_PLATFORM_WIN32s: /* Windows 3.x */ 104 p = "Windows"; 105 break; 106 default: 107 p = "unknown"; 108 break; 109 } 110 fprintf(fp, 111 "%s, %ld.%02ld", p, osver.dwMajorVersion, osver.dwMinorVersion); 112 return (0); 113} 114 115#elif defined(HAVE_VXWORKS) 116static int 117write_info(fp) 118 FILE *fp; 119{ 120 fprintf(fp, "<p>VxWorks"); 121 return (0); 122} 123 124#else /* POSIX */ 125#include <sys/utsname.h> 126 127static int 128write_info(fp) 129 FILE *fp; 130{ 131 struct utsname name; 132 133 if (uname(&name) == 0) 134 fprintf(fp, "<p>%s, %s<br>\n%s, %s, %s</p>\n", name.nodename, 135 name.machine, name.sysname, name.release, name.version); 136 else { 137 /* 138 * We've seen random failures on some systems, complain and 139 * skip the call if it fails. 140 */ 141 fprintf(stderr, "%s: uname: %s\n", progname, strerror(errno)); 142 143 fprintf(fp, "<p>POSIX"); 144 } 145 return (0); 146} 147#endif 148