From dae43f323db9578e656e3a6c53440e2365421af7 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Tue, 20 Feb 2018 16:42:25 +0200 Subject: 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. --- doc/wordsplit.3 | 5 +++-- include/wordsplit.h | 4 ++-- src/wordsplit.c | 11 ++++++++--- 3 files changed, 13 insertions(+), 7 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 . .\" -.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,9 +1034,14 @@ expvar (struct wordsplit *wsp, const char *str, size_t len, rc = wordsplit_find_env (wsp, str, i, &vptr); if (rc == WRDSE_OK) { - value = strdup (vptr); - if (!value) - rc = WRDSE_NOSPACE; + 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); -- cgit v1.2.1