Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 11 Oct 1998 12:44:43 +0800
From:      Peter Wemm <peter@netplex.com.au>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        bde@FreeBSD.ORG, cvs-all@FreeBSD.ORG, cvs-committers@FreeBSD.ORG
Subject:   Re: cvs commit: src/lib/libc/gen popen.c 
Message-ID:  <199810110444.MAA18868@spinner.netplex.com.au>
In-Reply-To: Your message of "Sun, 11 Oct 1998 14:40:28 %2B1000." <199810110440.OAA08152@godzilla.zeta.org.au> 

next in thread | previous in thread | raw e-mail | index | archive | help
Bruce Evans wrote:
> More vfork breakage:  vfork is used in about 50 programs in /usr/src.
> It is misused in all 7 programs that I looked at:
> 
> 	as cron libdialog mv rcp rcs vipw
> 
> Most of these call execl() from the forked child.  cron calls execvp(),
> which calls strdup().

I suspect this has come about because of a change of implementation in 
exec*().  I suspect they used to do something like:

execl(arg1, arg2)
{
    execve(arg1, &arg1, environ);
}

... but since prototypes has been changed to use malloc etc and build an
array by sucking in args via va_arg() etc.

IMHO, it's bad form for exec* to call malloc.  I've been burned before with
exec() calls mysteriously failing that turned out to be malloc corruption.
The implementation would be better to use something else.  Since we
presently depend on the gcc environment, we could use it's extensions...

execl()
{
  int count;
  char **argv;
  
  count = (args by walking through the va_list with va_arg());
  .. and rest of exec processing..
  {
     char *newargv[count + 1];
     .. copy arg pointers into newargv ..
     execve(path, newargv);
  }
}
This will work on all platforms we are likely to support.

> Bruce
> 

Cheers,
-Peter
--
Peter Wemm <peter@netplex.com.au>   Netplex Consulting
"No coffee, No workee!" :-)



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810110444.MAA18868>