summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org>2018-02-20 14:42:25 (GMT)
committer Sergey Poznyakoff <gray@gnu.org>2018-02-20 14:46:31 (GMT)
commitdae43f323db9578e656e3a6c53440e2365421af7 (patch) (side-by-side diff)
tree6e1cec4e17f3ee0132a1819e6c5a05d5170e18f0
parent3299cf1ccb1c596969fcfd91253e10d5482eacf9 (diff)
downloadgrecs-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.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--doc/wordsplit.35
-rw-r--r--include/wordsplit.h4
-rw-r--r--src/wordsplit.c11
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 <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,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);

Return to:

Send suggestions and report system problems to the System administrator.