#endif
#include "zend_globals.h" /* needs ELS */
#include "zend_highlight.h"
+#ifdef HAVE_SYS_UTSNAME_H
+#include <sys/utsname.h>
+#endif
#define SECTION(name) PUTS("<h2 align=\"center\">" name "</h2>\n")
/* {{{ 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);
}
if (flag & PHP_INFO_GENERAL) {
char *zend_version = get_zend_version();
- php_uname = php_get_uname();
+ php_uname = php_get_uname('a');
PUTS("<head>");
php_info_print_style();
PUTS("<title>phpinfo()</title></head><body>");
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);
}
/* }}} */