00001
00002
00003 #include "ace/OS_NS_sys_utsname.h"
00004
00005 ACE_RCSID(ace, OS_NS_sys_utsname, "$Id: OS_NS_sys_utsname.cpp 86433 2009-08-09 19:19:12Z johnnyw $")
00006
00007 #include "ace/OS_NS_string.h"
00008 #include "ace/OS_NS_stdio.h"
00009 #include "ace/OS_NS_unistd.h"
00010
00011 #if defined (ACE_VXWORKS) && defined (ACE_LACKS_UNAME)
00012
00013 # include <sysLib.h>
00014
00015 # include <kernelLib.h>
00016 #endif
00017
00018 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00019
00020 int
00021 ACE_OS::uname (ACE_utsname *name)
00022 {
00023 ACE_OS_TRACE ("ACE_OS::uname");
00024 #if !defined (ACE_LACKS_UNAME)
00025 ACE_OSCALL_RETURN (::uname (name), int, -1);
00026 #elif defined (ACE_WIN32)
00027 size_t maxnamelen = sizeof name->nodename;
00028 ACE_OS::strcpy (name->sysname, "Win32");
00029
00030 ACE_TEXT_OSVERSIONINFO vinfo;
00031 vinfo.dwOSVersionInfoSize = sizeof(ACE_TEXT_OSVERSIONINFO);
00032 ACE_TEXT_GetVersionEx (&vinfo);
00033
00034 SYSTEM_INFO sinfo;
00035 # if defined (ACE_HAS_PHARLAP)
00036
00037
00038
00039
00040
00041 EK_KERNELINFO ets_kern;
00042 EK_SYSTEMINFO ets_sys;
00043 EtsGetSystemInfo (&ets_kern, &ets_sys);
00044 sinfo.wProcessorLevel = static_cast<WORD> (ets_kern.CpuType);
00045 sinfo.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL;
00046 sinfo.dwProcessorType = ets_kern.CpuType * 100 + 86;
00047 # else
00048 ::GetSystemInfo(&sinfo);
00049 # endif
00050
00051 const char* unknown = "???";
00052
00053 if (
00054 vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT
00055 # if defined (VER_PLATFORM_WIN32_CE)
00056 || vinfo.dwPlatformId == VER_PLATFORM_WIN32_CE
00057 # endif
00058 )
00059 {
00060
00061 const char *os = 0;
00062 if (vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
00063 os = "Windows NT %d.%d";
00064 else
00065 os = "Windows CE %d.%d";
00066 ACE_OS::sprintf (name->release,
00067 os,
00068 (int) vinfo.dwMajorVersion,
00069 (int) vinfo.dwMinorVersion);
00070 ACE_OS::sprintf (name->version,
00071 "Build %d %s",
00072 (int) vinfo.dwBuildNumber,
00073 ACE_TEXT_ALWAYS_CHAR (vinfo.szCSDVersion));
00074
00075
00076
00077
00078
00079
00080 int const bufsize = (sizeof (name->machine) / 2) - 1;
00081 char processor[bufsize] = "Unknown";
00082 char subtype[bufsize] = "Unknown";
00083
00084 # if defined (ghs)
00085 WORD arch = sinfo.u.s.wProcessorArchitecture;
00086 # else
00087 WORD arch = sinfo.wProcessorArchitecture;
00088 # endif
00089
00090 switch (arch)
00091 {
00092 case PROCESSOR_ARCHITECTURE_INTEL:
00093 ACE_OS::strcpy (processor, "Intel");
00094 if (sinfo.wProcessorLevel == 3)
00095 ACE_OS::strcpy (subtype, "80386");
00096 else if (sinfo.wProcessorLevel == 4)
00097 ACE_OS::strcpy (subtype, "80486");
00098 else if (sinfo.wProcessorLevel == 5)
00099 ACE_OS::strcpy (subtype, "Pentium");
00100 else if (sinfo.wProcessorLevel == 6)
00101 ACE_OS::strcpy (subtype, "Pentium Pro");
00102 else if (sinfo.wProcessorLevel == 7)
00103 ACE_OS::strcpy (subtype, "Pentium II");
00104 else
00105 ACE_OS::sprintf (subtype, "%d", sinfo.wProcessorLevel);
00106 break;
00107 case PROCESSOR_ARCHITECTURE_MIPS:
00108 ACE_OS::strcpy (processor, "MIPS");
00109 if (sinfo.wProcessorLevel == 3)
00110 ACE_OS::strcpy (subtype, "R3000");
00111 else if (sinfo.wProcessorLevel == 4)
00112 ACE_OS::strcpy (subtype, "R4000");
00113 else
00114 ACE_OS::sprintf (subtype, "%d", sinfo.wProcessorLevel);
00115 break;
00116 case PROCESSOR_ARCHITECTURE_ALPHA:
00117 ACE_OS::strcpy (processor, "Alpha");
00118 ACE_OS::sprintf (subtype, "%d", sinfo.wProcessorLevel);
00119 break;
00120 case PROCESSOR_ARCHITECTURE_PPC:
00121 ACE_OS::strcpy (processor, "PPC");
00122 if (sinfo.wProcessorLevel == 1)
00123 ACE_OS::strcpy (subtype, "601");
00124 else if (sinfo.wProcessorLevel == 3)
00125 ACE_OS::strcpy (subtype, "603");
00126 else if (sinfo.wProcessorLevel == 4)
00127 ACE_OS::strcpy (subtype, "604");
00128 else if (sinfo.wProcessorLevel == 6)
00129 ACE_OS::strcpy (subtype, "603+");
00130 else if (sinfo.wProcessorLevel == 9)
00131 ACE_OS::strcpy (subtype, "804+");
00132 else if (sinfo.wProcessorLevel == 20)
00133 ACE_OS::strcpy (subtype, "620");
00134 break;
00135 # if defined PROCESSOR_ARCHITECTURE_IA64
00136 case PROCESSOR_ARCHITECTURE_IA64:
00137 ACE_OS::strcpy (processor, "Itanium");
00138 ACE_OS::sprintf (subtype, "%d",
00139 sinfo.wProcessorLevel);
00140 break;
00141 # endif
00142 # if defined PROCESSOR_ARCHITECTURE_AMD64
00143 case PROCESSOR_ARCHITECTURE_AMD64:
00144 ACE_OS::strcpy (processor, "x64");
00145 ACE_OS::sprintf (subtype, "%d",
00146 sinfo.wProcessorLevel);
00147 break;
00148 # endif
00149 # if defined PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
00150 case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
00151 ACE_OS::strcpy (processor, "WOW64");
00152 ACE_OS::sprintf (subtype, "%d",
00153 sinfo.wProcessorLevel);
00154 break;
00155 # endif
00156 # if defined PROCESSOR_ARCHITECTURE_ARM
00157 case PROCESSOR_ARCHITECTURE_ARM:
00158 ACE_OS::strcpy (processor, "ARM");
00159 ACE_OS::sprintf (subtype, "%d",
00160 sinfo.wProcessorLevel);
00161 break;
00162 # endif
00163 case PROCESSOR_ARCHITECTURE_UNKNOWN:
00164 default:
00165
00166
00167 ACE_OS::strcpy (processor, "Unknown");
00168 break;
00169 }
00170 ACE_OS::sprintf (name->machine,
00171 "%s %s",
00172 processor, subtype);
00173 }
00174 else if (vinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
00175 {
00176 if (vinfo.dwMajorVersion == 4 && vinfo.dwMinorVersion == 0)
00177 {
00178 ACE_OS::strcpy (name->release, "Windows 95");
00179 if (vinfo.szCSDVersion[1] == ACE_TEXT('C'))
00180 ACE_OS::strcat (name->release, " OSR2");
00181 }
00182 else if (vinfo.dwMajorVersion == 4 && vinfo.dwMinorVersion == 10)
00183 {
00184 ACE_OS::strcpy (name->release, "Windows 98");
00185 if (vinfo.szCSDVersion[1] == ACE_TEXT('A'))
00186 ACE_OS::strcat (name->release, " SE");
00187 }
00188 else if (vinfo.dwMajorVersion == 4 && vinfo.dwMinorVersion == 90)
00189 {
00190 ACE_OS::strcpy (name->release, "Windows Me");
00191 }
00192 else
00193 {
00194 ACE_OS::strcpy (name->release, unknown);
00195 }
00196
00197 ACE_OS::sprintf (name->version, "%d", LOWORD (vinfo.dwBuildNumber));
00198 if (sinfo.dwProcessorType == PROCESSOR_INTEL_386)
00199 ACE_OS::strcpy (name->machine, "Intel 80386");
00200 else if (sinfo.dwProcessorType == PROCESSOR_INTEL_486)
00201 ACE_OS::strcpy (name->machine, "Intel 80486");
00202 else if (sinfo.dwProcessorType == PROCESSOR_INTEL_PENTIUM)
00203 ACE_OS::strcpy (name->machine, "Intel Pentium");
00204 else
00205 ACE_OS::strcpy (name->machine, unknown);
00206 }
00207 else
00208 {
00209
00210
00211 ACE_OS::strcpy (name->release, unknown);
00212 ACE_OS::strcpy (name->version, unknown);
00213 ACE_OS::strcpy (name->machine, unknown);
00214 }
00215
00216 # if defined (ACE_LACKS_HOSTNAME)
00217 return 0;
00218 # else
00219 return ACE_OS::hostname (name->nodename, maxnamelen);
00220 # endif
00221
00222 #elif defined (ACE_VXWORKS)
00223 size_t const maxnamelen = sizeof name->nodename;
00224 ACE_OS::strcpy (name->sysname, "VxWorks");
00225 ACE_OS::strcpy (name->release, kernelVersion());
00226 ACE_OS::strcpy (name->version, sysBspRev ());
00227 ACE_OS::strcpy (name->machine, sysModel ());
00228
00229 return ACE_OS::hostname (name->nodename, maxnamelen);
00230 #elif defined (INTEGRITY)
00231 if(!name) {
00232 errno = EFAULT;
00233 return -1;
00234 }
00235 strcpy(name->sysname,"INTEGRITY");
00236 int status = gethostname(name->nodename,_SYS_NMLN);
00237 strcpy(name->release,"4.0");
00238 strcpy(name->version,"4.0.9");
00239 strcpy(name->machine,"a standard name");
00240 return status;
00241 #endif
00242 }
00243
00244 ACE_END_VERSIONED_NAMESPACE_DECL