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