Skip to content

Commit 0e38fed

Browse files
committed
Fix the setting of computer name and processor type for php_uname() on Win32
1 parent 9a0f988 commit 0e38fed

File tree

1 file changed

+44
-6
lines changed

1 file changed

+44
-6
lines changed

ext/standard/info.c

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ PHPAPI char *php_get_uname(char mode)
211211
DWORD dwVersion = GetVersion();
212212
DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
213213
DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
214+
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
215+
char ComputerName[MAX_COMPUTERNAME_LENGTH + 1];
216+
SYSTEM_INFO SysInfo;
217+
218+
GetComputerName(ComputerName, &dwSize);
219+
GetSystemInfo(&SysInfo);
214220

215221
if (mode == 's') {
216222
if (dwVersion < 0x80000000) {
@@ -222,25 +228,57 @@ PHPAPI char *php_get_uname(char mode)
222228
snprintf(tmp_uname, sizeof(tmp_uname), "%d.%d", dwWindowsMajorVersion, dwWindowsMinorVersion);
223229
php_uname = tmp_uname;
224230
} else if (mode == 'n') {
225-
/* XXX HOW TO GET THIS ON WINDOWS? */
226-
php_uname = "localhost";
231+
php_uname = ComputerName;
227232
} else if (mode == 'v') {
228233
dwBuild = (DWORD)(HIWORD(dwVersion));
229234
snprintf(tmp_uname, sizeof(tmp_uname), "build %d", dwBuild);
230235
php_uname = tmp_uname;
231236
} else if (mode == 'm') {
232-
/* XXX HOW TO GET THIS ON WINDOWS? */
233-
php_uname = "i386";
237+
switch (SysInfo.wProcessorArchitecture) {
238+
case PROCESSOR_ARCHITECTURE_INTEL :
239+
snprintf(tmp_uname, sizeof(tmp_uname), "i%d", SysInfo.dwProcessorType);
240+
php_uname = tmp_uname;
241+
break;
242+
case PROCESSOR_ARCHITECTURE_MIPS :
243+
php_uname = "MIPS R4000";
244+
php_uname = tmp_uname;
245+
break;
246+
case PROCESSOR_ARCHITECTURE_ALPHA :
247+
snprintf(tmp_uname, sizeof(tmp_uname), "Alpha %d", SysInfo.wProcessorLevel);
248+
php_uname = tmp_uname;
249+
break;
250+
case PROCESSOR_ARCHITECTURE_PPC :
251+
snprintf(tmp_uname, sizeof(tmp_uname), "PPC 6%02d", SysInfo.wProcessorLevel);
252+
php_uname = tmp_uname;
253+
break;
254+
case PROCESSOR_ARCHITECTURE_IA64 :
255+
php_uname = "IA64";
256+
break;
257+
#if defined(PROCESSOR_ARCHITECTURE_IA32_ON_WIN64)
258+
case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 :
259+
php_uname = "IA32";
260+
break;
261+
#endif
262+
#if defined(PROCESSOR_ARCHITECTURE_AMD64)
263+
case PROCESSOR_ARCHITECTURE_AMD64 :
264+
php_uname = "AMD64";
265+
break;
266+
#endif
267+
case PROCESSOR_ARCHITECTURE_UNKNOWN :
268+
default :
269+
php_uname = "Unknown";
270+
break;
271+
}
234272
} else { /* assume mode == 'a' */
235273
/* Get build numbers for Windows NT or Win95 */
236274
if (dwVersion < 0x80000000){
237275
dwBuild = (DWORD)(HIWORD(dwVersion));
238276
snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d build %d",
239-
"Windows NT", "localhost",
277+
"Windows NT", ComputerName,
240278
dwWindowsMajorVersion, dwWindowsMinorVersion, dwBuild);
241279
} else {
242280
snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d",
243-
"Windows 9x", "localhost",
281+
"Windows 9x", ComputerName,
244282
dwWindowsMajorVersion, dwWindowsMinorVersion);
245283
}
246284
php_uname = tmp_uname;

0 commit comments

Comments
 (0)