diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/regress.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 8bae56a9777..8309166f5b2 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -37,6 +37,7 @@ #include "parser/parse_coerce.h" #include "port/atomics.h" #include "storage/spin.h" +#include "utils/array.h" #include "utils/builtins.h" #include "utils/geo_decls.h" #include "utils/memutils.h" @@ -641,6 +642,29 @@ make_tuple_indirect(PG_FUNCTION_ARGS) PG_RETURN_POINTER(newtup->t_data); } +PG_FUNCTION_INFO_V1(get_environ); + +Datum +get_environ(PG_FUNCTION_ARGS) +{ + extern char **environ; + int nvals = 0; + ArrayType *result; + Datum *env; + + for (char **s = environ; *s; s++) + nvals++; + + env = palloc(nvals * sizeof(Datum)); + + for (int i = 0; i < nvals; i++) + env[i] = CStringGetTextDatum(environ[i]); + + result = construct_array_builtin(env, nvals, TEXTOID); + + PG_RETURN_POINTER(result); +} + PG_FUNCTION_INFO_V1(regress_setenv); Datum |