From ba06a02d74fa1a656a0fef010ecfa5da94117199 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Fri, 12 Feb 2016 09:29:19 -0500 Subject: [PATCH] env-var iterate --- c/containers/mlrval.c | 2 +- c/mapping/lrec_evaluators.c | 15 +++++++++------ c/todo.txt | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/c/containers/mlrval.c b/c/containers/mlrval.c index b64488fb5..5eea834e6 100644 --- a/c/containers/mlrval.c +++ b/c/containers/mlrval.c @@ -122,7 +122,7 @@ char* mv_format_val(mv_t* pval, char* pfree_flags) { break; case MT_STRING: // Ownership transfer to the caller - *pfree_flags = FREE_ENTRY_VALUE; + *pfree_flags = pval->free_flags;; rv = pval->u.strv; *pval = MV_NULL; break; diff --git a/c/mapping/lrec_evaluators.c b/c/mapping/lrec_evaluators.c index a982390b3..8fec2b2e7 100644 --- a/c/mapping/lrec_evaluators.c +++ b/c/mapping/lrec_evaluators.c @@ -1748,16 +1748,19 @@ mv_t lrec_evaluator_environment_func(lrec_t* prec, lhmsv_t* ptyped_overlay, mlhm if (mv_is_null(&mvname)) { return MV_NULL; } - - // xxx string strict ... - - char* value = getenv(mvname.u.strv); - if (value == NULL) { + char free_flags; + char* strname = mv_format_val(&mvname, &free_flags); + char* strvalue = getenv(strname); + if (strvalue == NULL) { mv_free(&mvname); + if (free_flags & FREE_ENTRY_VALUE) + free(strname); return MV_NULL; } - mv_t rv = mv_from_string(value, NO_FREE); + mv_t rv = mv_from_string(strvalue, NO_FREE); mv_free(&mvname); + if (free_flags & FREE_ENTRY_VALUE) + free(strname); return rv; } diff --git a/c/todo.txt b/c/todo.txt index 312dca12a..9e8952168 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -7,7 +7,7 @@ BUGFIXES TOP-OF-LIST SUMMARY * JSON input: UT/doc items -* env vars: UT +* env vars: UT; OLH ~ PI/E/etc. ! rh/fedora/centos mlr-3.3.2: after patch-file for manpage * parameterized emit: needs spec & impl * pattern-action: note that breaks the simple LHS/RHS partition I've enjoyed up until now