int
wordexp(
const char * restrict words
, wordexp_t * restrict pwordexp
, int flags
)
void
wordfree(
wordexp_t *pwordexp
)
)
function performs shell-style word expansion on
words
and places the list of expanded words into the structure pointed to by
pwordexp
.
The
flags
argument is the bitwise inclusive OR of any of the following constants:
WRDE_APPEND
).
WRDE_DOOFFS
NULL
pointers as are specified by the
we_offs
member of
we
are added to the front of
we_wordv.
WRDE_NOCMD
words
.
See the note in
BUGS
before using this.
WRDE_REUSE
we
argument was passed to a previous successful call to
wordexp(
)
but has not been passed to
wordfree(
).
The implementation may reuse the space allocated to it.
WRDE_SHOWERR
/dev/null
.
WRDE_UNDEF
The structure type wordexp_t includes the following members:
size_t we_wordc
char **we_wordv
size_t we_offs
The
we_wordc
member is the count of generated words.
The
we_wordv
member points to a list of pointers to expanded words.
The
we_offs
member is the number of slots to reserve at the beginning of the
we_wordv
member.
It is the caller's responsibility to allocate the storage pointed to by
pwordexp
.
The
wordexp()
function allocates other space as needed, including memory
pointed to by the
we_wordv
member.
The
wordfree()
function frees the memory allocated by
wordexp(
).
)
function is implemented as a wrapper around the undocumented
wordexp
shell built-in command.
)
function returns zero if successful, otherwise it returns one of the following
error codes:
WRDE_BADCHAR
words
argument contains one of the following unquoted characters:
<newline>,
`|',
`&',
`;',
`<',
`>',
`(',
`)',
`'{,
`'}.
WRDE_BADVAL
WRDE_UNDEF
is set in
flags
.
WRDE_CMDSUB
WRDE_NOCMD
is set in
flags
.
WRDE_NOSPACE
WRDE_SYNTAX
words
.
WRDE_ERRNO
The
wordfree()
function returns no value.
IFS
.c
files in the current directory
and
/etc/motd
(error checking omitted):
wordexp_t we;
wordexp("${EDITOR:-vi} *.c /etc/motd", &we, 0);
execvp(we->we_wordv[0], we->we_wordv);
WRDE_SHOWERR
is set in
flags
.
)
and
wordfree(
)
functions conform to
IEEE Std 1003.1-2001 (``POSIX.1'') .
Their first release was in
IEEE Std 1003.2-1992 (``POSIX.2'') .
The return value
WRDE_ERRNO
is an extension.
),
regardless of whether the
WRDE_NOCMD
flag is set.
The
wordexp(
)
function attempts to detect input that would cause commands to be
executed before passing it to the shell
but it does not use the same parser so it may be fooled.