wordexp [ MPE/iX Developer's Kit Reference Manual Volume I ] MPE/iX 5.0 Documentation
MPE/iX Developer's Kit Reference Manual Volume I
wordexp
Expand special constructions.
Syntax
#include <wordexp.h>
int wordexp (const char *words, wordexp_t *expansions, int flags);
Parameters
words is a string containing various special constructions that are
typically expanded in shell command lines (for example,
command substitutions, directory substitutions, parameter
expansions, and so on).
expansions points to an object of type wordexp_t where wordexp() can
store the expanded version of words. It is created by the
caller.
flags is a collection of flags controlling the wordexp() action.
Flags are specified by ORing together symbolic constants
defined in <wordexp.h>. Possible symbols are:
WRDE_APPEND appends expansions to an existing expansions
list generated by a previous call to
wordexp().
WRDE_DOOFFS uses the we_offs field in the wordexp_t
structure expansions.
WRDE_NOCMD does not perform command substitution.
wordexp() fails if command substitution is
attempted.
WRDE_REUSE expansions was passed to previous successful
call to wordexp() and has not been passed to
wordfree(). The result is the same as if the
application had called wordfree() and then
called wordexp().
WRDE_SHOWERR Do not redirect the standard error to
/dev/null.
WRDE_UNDEF Reports error on attempt to expand an
undefined shell variable.
Return Values
If wordexp() completes successfully, it returns zero. Otherwise, it
returns one of the following error messages.
Description
wordexp() expands special constructs in the string words. See the
section Expanded Constructs for a list of the constructs that wordexp()
expands.
wordexp() returns the expansion using a wordexp_t structure. This
structure has the following fields:
int we_wordc; is the number of words in the expansion of words. This
field is set by wordexp().
char points to a list of strings giving the expansions of
**we_wordv; words from words. Each individual field created during
expansion becomes a separate word in the we_wordv list.
The first pointer after the last path name is NULL. This
field is set by wordexp().
int we_offs; tells how many NULL pointers you want at the beginning
of the we_wordv list. This creates a specified amount
of `blank' space at the beginning of we_wordv that can
be used for other purposes. For example, you might fill
this space with other arguments before passing the whole
we_wordv vector as an argument to a function like
execv().
You set we_offs before calling wordexp(). wordexp() puts the specified
number of NULL pointers at the beginning of the we_wordv list before
putting in pointers to the strings giving the expansion of words.
wordexp() only pays attention to we_offs if WRDE_DOOFFS is set in flags.
If WRDE_APPEND is specified, wordexp() follows these rules:
1. If WRDE_DOOFFS is set in the first call to wordexp(), it must be
set in subsequent calls and we_offs must have the same value in
each call.
2. If WRDE_DOOFFS is not set in the first call, it must not be set in
subsequent calls.
3. After the second call, we_wordv points to a list containing: the
number of NULL pointers as determined by WRDE_DOOFFS and we_offs;
pointers to the words that were in the list before the second
call, in the same order as before; and pointers to the new words
obtained by the second call, in the order dictated by the flags
for the second call.
4. we_wordc gives the total number of words from all the calls.
You must not change we_wordc or we_wordv between calls to wordexp().
Expanded Constructs
wordexp() performs the following expansions in the order given:
Directory expands constructs of the form ~logname into the
Substitution full path name of the user logname's home
directory.
Parameter Expansion expands the following constructs:
${parameter}
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
${#parameter}
${parameterword}
${parameterword}
${parameter#word}
${parameter##word}
The result of the expansion of these constructs is
detailed in the sh(1) man page.
Command Substitution expands the following constructs
$(command)
`command`
by executing command and replacing the construct
with its output.
Arithmetic Expansion expands constructs of the form
$((%%expression%%))
by replacing the construct with the value of the
arithmetic expression.
These expansions are discussed in much greater detail in sh(1).
After performing the various expansions, wordexp() breaks up the result
into separate words. Words are assumed to be separated by any one of the
characters in the string value of the environment variable IFS. If IFS
does not exist, wordexp() assumes that words are separated by one or more
white space characters (blanks, tabs, or newlines). When splitting words
in this way, wordexp()
After breaking up words into these separate words, wordexp() performs
filename generation on names that are not quoted (see sh(1)).
Finally, wordexp() removes backslashes, quotes, and apostrophes from
expanded strings, as appropriate.
NOTE wordexp() does not handle the special meanings of | (pipe), & (put
job in background), ; (separate one command from another), < (input
redirection) or > (output redirection). If the words string
contains any of these outside of quotes or apostrophes, wordexp()
fails and does not expand any words.
Once a program has finished using the paths structure, it should use
wordfree() to free up the space used to store the path name list.
Errors
If an error occurs, errno is set to one of the following values:
WRDE_BADCHAR CAUSE An unquoted shell metacharacter appeared in words in
an inappropriate context.
ACTION Examine and correct the syntax of the words string
that was passed to the function.
WRDE_BADVAL CAUSE You attempted to reference an undefined shell
variable when WRDE_UNDEF was set in flags.
ACTION Unset WRDE_UNDEF, or do not use undefined shell
variables.
WRDE_CMDSUB CAUSE Command substitution was requested when WRDE_NOCMD
was set in flags.
ACTION Unset WRDE_NOCMD, or do not request command
substitution.
WRDE_ERRNO CAUSE A system call failed inside wrdexp(), setting the
variable errno. The failure was one of the
following:
1. confstr() failed to get the name of the shell
2. pipe() was unable to create a pipe
3. wordexp() was unable to fork() or exec() the
shell.
4. waitpid() for a child process failed.
ACTION Check the value of the variable errno to determine
the true cause of the error.
WRDE_NOSPACE CAUSE wordexp() was unable to allocate memory for one of
its operations. we_wordc and we_wordv are still
updated to show whatever words have already expanded.
ACTION Free up more memory.
WRDE_SYNTAX CAUSE words contained a shell syntax error, such as an
unbalanced parentheses or unterminated string.
ACTION Correct the syntax of words.
See Also
sh(1), glob(), wordfree()
MPE/iX 5.0 Documentation