vexec function(s)?
Roland McGrath
mcgrath%tully.Berkeley.EDU at ucbvax.Berkeley.EDU
Thu Jul 26 10:12:42 AEST 1990
From: mcgrath%tully.Berkeley.EDU at ucbvax.Berkeley.EDU (Roland McGrath)
In article <10461 at cs.utexas.edu> rfg at lupine.uucp (Ron Guilmette) writes:
What I appear to need here is either:
a) a standard way to convert a va_list into a list of pointers
(to argument values), or
b) a standard way to modify one element of a va_list *and* a
standard function like:
int vexeclp (char *name, va_list vargs);
None of these things are a part of standard ANSI C (as far as I know).
Are any of them a part of POSIX? If not, why not?
A would fall under the C standard, and B under 1003.1. However, neither of
these exist. I imagine the answer the appropriate committees would give would
be "insufficient utility".
At any rate, you can handle the case in question by doing A manually, since
`execlp' has a defined way of determining its number of arguments:
{
char **argv[ARG_MAX];
register unsigned int i = 0;
va_list args;
va_start(args, lastarg);
do
argv[i] = va_arg(args, char *);
while (argv[i++] != NULL);
}
(Actually, I would suggest dynamically allocating ARGV to avoid eating all your
memory if ARG_MAX is very large.)
--
Roland McGrath
Free Software Foundation, Inc.
roland at ai.mit.edu, uunet!ai.mit.edu!roland
Volume-Number: Volume 20, Number 146
More information about the Comp.std.unix
mailing list