From 7f89d8c13a7c4d86a4efb8b15609533bf2928d9e Mon Sep 17 00:00:00 2001 From: Stig Bakken Date: Fri, 29 Mar 2002 10:19:23 +0000 Subject: [PATCH] (PHP php_uname) display runtime uname rather than compile-time uname, added an optional parameter to get single fields (like uname(1)) # Windows version is not tested, and I didn't know how to get # `uname -n` on Windows, so it's hardcoded to "localhost" for now. # Windows gurus feel free to fix. :-) --- ext/standard/info.c | 86 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 70 insertions(+), 16 deletions(-) diff --git a/ext/standard/info.c b/ext/standard/info.c index ac0d5560e6..24ab23357e 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -33,6 +33,9 @@ #endif #include "zend_globals.h" /* needs ELS */ #include "zend_highlight.h" +#ifdef HAVE_SYS_UTSNAME_H +#include +#endif #define SECTION(name) PUTS("

" name "

\n") @@ -119,26 +122,76 @@ void php_info_print_style(void) /* {{{ php_get_uname */ -PHPAPI char *php_get_uname() +PHPAPI char *php_get_uname(char mode) { char *php_uname; + char tmp_uname[256]; #ifdef PHP_WIN32 - char php_windows_uname[256]; DWORD dwBuild=0; DWORD dwVersion = GetVersion(); DWORD dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); DWORD dwWindowsMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); - /* Get build numbers for Windows NT or Win95 */ - if (dwVersion < 0x80000000){ - dwBuild = (DWORD)(HIWORD(dwVersion)); - snprintf(php_windows_uname, 255, "%s %d.%d build %d", "Windows NT", dwWindowsMajorVersion, dwWindowsMinorVersion, dwBuild); - } else { - snprintf(php_windows_uname, 255, "%s %d.%d", "Windows 95/98", dwWindowsMajorVersion, dwWindowsMinorVersion); - } - php_uname = php_windows_uname; + if (mode == 's') { + if (dwVersion < 0x80000000) { + php_uname = "Windows NT"; + } else { + php_uname = "Windows 9x"; + } + } else if (mode == 'r') { + snprintf(tmp_uname, sizeof(tmp_uname), "%d.%d", + dwWindowsMajorVersion, dwWindowsMinorVersion); + php_uname = tmp_uname; + } else if (mode == 'n') { + // XXX HOW TO GET THIS ON WINDOWS? + php_uname = "localhost"; + } else if (mode == 'v') { + dwBuild = (DWORD)(HIWORD(dwVersion)); + snprintf(tmp_uname, sizeof(tmp_uname), "build %d", dwBuild); + php_uname = tmp_uname; + } else if (mode == 'm') { + // XXX HOW TO GET THIS ON WINDOWS? + php_uname = "i386"; + } else { // assume mode == 'a' + /* Get build numbers for Windows NT or Win95 */ + if (dwVersion < 0x80000000){ + dwBuild = (DWORD)(HIWORD(dwVersion)); + snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d build %d", + "Windows NT", "localhost", + dwWindowsMajorVersion, dwWindowsMinorVersion, dwBuild); + } else { + snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %d.%d", + "Windows 9x", "localhost", + dwWindowsMajorVersion, dwWindowsMinorVersion); + } + php_uname = tmp_uname; + } +#else +#ifdef HAVE_SYS_UTSNAME_H + struct utsname buf; + if (uname((struct utsname *)&buf) == -1) { + php_uname = PHP_UNAME; + } else { + if (mode == 's') { + php_uname = buf.sysname; + } else if (mode == 'r') { + php_uname = buf.release; + } else if (mode == 'n') { + php_uname = buf.nodename; + } else if (mode == 'v') { + php_uname = buf.version; + } else if (mode == 'm') { + php_uname = buf.machine; + } else { // assume mode == 'a' + snprintf(tmp_uname, sizeof(tmp_uname), "%s %s %s %s %s", + buf.sysname, buf.nodename, buf.release, buf.version, + buf.machine); + php_uname = tmp_uname; + } + } #else - php_uname=PHP_UNAME; + php_uname = PHP_UNAME; +#endif #endif return estrdup(php_uname); } @@ -162,7 +215,7 @@ PHPAPI void php_print_info(int flag TSRMLS_DC) if (flag & PHP_INFO_GENERAL) { char *zend_version = get_zend_version(); - php_uname = php_get_uname(); + php_uname = php_get_uname('a'); PUTS(""); php_info_print_style(); PUTS("phpinfo()"); @@ -573,11 +626,12 @@ PHP_FUNCTION(php_sapi_name) Return information about the system PHP was built on */ PHP_FUNCTION(php_uname) { - if (ZEND_NUM_ARGS() != 0) { - WRONG_PARAM_COUNT; + char *mode = "a"; + int modelen; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &mode, &modelen) == FAILURE) { + return; } - - RETURN_STRING(php_get_uname(), 0); + RETURN_STRING(php_get_uname(*mode), 0); } /* }}} */ -- 2.50.1