diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-02-20 16:42:25 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-02-20 16:46:31 +0200 |
commit | dae43f323db9578e656e3a6c53440e2365421af7 (patch) | |
tree | 6e1cec4e17f3ee0132a1819e6c5a05d5170e18f0 | |
parent | 3299cf1ccb1c596969fcfd91253e10d5482eacf9 (diff) | |
download | grecs-dae43f323db9578e656e3a6c53440e2365421af7.tar.gz grecs-dae43f323db9578e656e3a6c53440e2365421af7.tar.bz2 |
Minor improvement in wordsplit
* src/wordsplit.c (expvar): Gracefully handle NULL values in
ENV_KV environment.
* src/wordsplit.h: Fix typo in a comment.
* doc/wordsplit.3: Update.
-rw-r--r-- | doc/wordsplit.3 | 5 | ||||
-rw-r--r-- | include/wordsplit.h | 4 | ||||
-rw-r--r-- | src/wordsplit.c | 5 |
3 files changed, 10 insertions, 4 deletions
diff --git a/doc/wordsplit.3 b/doc/wordsplit.3 index 067ea5e..a391b81 100644 --- a/doc/wordsplit.3 +++ b/doc/wordsplit.3 @@ -14,7 +14,7 @@ .\" You should have received a copy of the GNU General Public License .\" along with Grecs. If not, see <http://www.gnu.org/licenses/>. .\" -.TH WORDSPLIT 3 "December 3, 2014" "GRECS" "Grecs User Reference" +.TH WORDSPLIT 3 "February 20, 2018" "GRECS" "Grecs User Reference" .SH NAME wordsplit \- split string into words .SH SYNOPSIS @@ -181,7 +181,8 @@ elements in the array: .IR ws_env [ n ] containing the variable name, and .IR ws_env [ "n+1" ] -containing its value. +containing its value. If the latter is \fBNULL\fR, the corresponding +variable is undefined. .PP More sophisticated variable tables can be implemented using callback function. The \fIws_getvar\fR member should be set to point diff --git a/include/wordsplit.h b/include/wordsplit.h index eed88bc..d8cd461 100644 --- a/include/wordsplit.h +++ b/include/wordsplit.h @@ -81,8 +81,8 @@ struct wordsplit void *clos); /* [Input] (!WRDSF_NOCMD) Returns in the memory location pointed to by RET the expansion of - the command CMD (LEN bytes nong). If WRDSF_ARGV - flag is set, ARGV contains CMD split out to + the command CMD (LEN bytes long). If WRDSO_ARGV + option is set, ARGV contains CMD split out to words. Otherwise ARGV is NULL. See ws_getvar for a discussion of possible diff --git a/src/wordsplit.c b/src/wordsplit.c index 4884a22..5cd8daa 100644 --- a/src/wordsplit.c +++ b/src/wordsplit.c @@ -1034,10 +1034,15 @@ expvar (struct wordsplit *wsp, const char *str, size_t len, rc = wordsplit_find_env (wsp, str, i, &vptr); if (rc == WRDSE_OK) { + if (vptr) + { value = strdup (vptr); if (!value) rc = WRDSE_NOSPACE; } + else + rc = WRDSE_UNDEF; + } else if (wsp->ws_flags & WRDSF_GETVAR) rc = wsp->ws_getvar (&value, str, i, wsp->ws_closure); else |