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