From d221821cee26a3e44d61fb475a231b218df9d710 Mon Sep 17 00:00:00 2001 From: Ferenc Kovacs Date: Mon, 12 Oct 2015 21:24:19 +0200 Subject: [PATCH] calling getenv() without arguments should return the environment variables as an array --- ext/standard/basic_functions.c | 16 ++++++++++++---- ext/standard/tests/general_functions/getenv.phpt | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 ext/standard/tests/general_functions/getenv.phpt diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index a812124296..7d0e1bfbf0 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -23,6 +23,7 @@ #include "php_streams.h" #include "php_main.h" #include "php_globals.h" +#include "php_variables.h" #include "php_ini.h" #include "php_standard.h" #include "php_math.h" @@ -631,7 +632,7 @@ ZEND_BEGIN_ARG_INFO(arginfo_long2ip, 0) ZEND_ARG_INFO(0, proper_address) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO(arginfo_getenv, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_getenv, 0, 0, 0) ZEND_ARG_INFO(0, varname) ZEND_END_ARG_INFO() @@ -4008,17 +4009,24 @@ PHP_FUNCTION(long2ip) * System Functions * ********************/ -/* {{{ proto string getenv(string varname) - Get the value of an environment variable */ +/* {{{ proto string getenv([string varname]) + Get the value of an environment variable or every available environment variable + if no varname is present */ PHP_FUNCTION(getenv) { char *ptr, *str; size_t str_len; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &str, &str_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s", &str, &str_len) == FAILURE) { RETURN_FALSE; } + if (!str) { + array_init(return_value); + php_import_environment_variables(return_value); + return; + } + /* SAPI method returns an emalloc()'d string */ ptr = sapi_getenv(str, str_len); if (ptr) { diff --git a/ext/standard/tests/general_functions/getenv.phpt b/ext/standard/tests/general_functions/getenv.phpt new file mode 100644 index 0000000000..006378a337 --- /dev/null +++ b/ext/standard/tests/general_functions/getenv.phpt @@ -0,0 +1,16 @@ +--TEST-- +getenv() basic tests +--ENV-- +FOO=bar +--FILE-- + +--EXPECTF-- +string(3) "bar" +string(3) "bar" +Done -- 2.40.0