From: Larry McVoy <lm@mcvoy.com>
To: Dave Horsfall <dave@horsfall.org>
Cc: The Eunuchs Hysterical Society <tuhs@tuhs.org>
Subject: [TUHS] Re: forking, Re: [COFF] Re: On Bloat and the Idea of Small Specialized Tools
Date: Mon, 13 May 2024 06:21:54 -0700 [thread overview]
Message-ID: <20240513132154.GN9216@mcvoy.com> (raw)
In-Reply-To: <alpine.BSF.2.21.9999.2405131133310.15285@aneurin.horsfall.org>
On Mon, May 13, 2024 at 11:34:38AM +1000, Dave Horsfall wrote:
> On Sun, 12 May 2024, Larry McVoy wrote:
>
> > Our spawnvp() implmentation is 40 lines of code. Worked fine everywhere.
> > I can post it if you like.
>
> Pretty please...
>
> -- Dave
/*
* Copyright 1999-2002,2004-2006,2015-2016 BitMover, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "system.h"
void (*spawn_preHook)(int flags, char *av[]) = 0;
#ifndef WIN32
pid_t
bk_spawnvp(int flags, char *cmdname, char *av[])
{
int fd, status;
pid_t pid;
char *exec;
/* Tell the calling process right away if there is no such program */
unless (exec = which((char*)cmdname)) return (-1);
if (spawn_preHook) spawn_preHook(flags, av);
if (pid = fork()) { /* parent */
free(exec);
if (pid == -1) return (pid);
unless (flags & (_P_DETACH|_P_NOWAIT)) {
if (waitpid(pid, &status, 0) != pid) status = -1;
return (status);
}
return (pid);
} else { /* child */
/*
* See win32/uwtlib/wapi_intf.c:spawnvp_ex()
* We leave nothing open on a detach, but leave
* in/out/err open on a normal fork/exec.
*/
if (flags & _P_DETACH) {
unless (getenv("_NO_SETSID")) setsid();
/* close everything to match winblows */
for (fd = 0; fd < 100; fd++) (close)(fd);
} else {
/*
* Emulate having everything except in/out/err
* as being marked as close on exec to match winblows.
*/
for (fd = 3; fd < 100; fd++) (close)(fd);
}
execv(exec, av);
perror(exec);
_exit(19);
}
}
#else /* ======== WIN32 ======== */
pid_t
bk_spawnvp(int flags, char *cmdname, char *av[])
{
pid_t pid;
char *exec;
/* Tell the calling process right away if there is no such program */
unless (exec = which((char*)cmdname)) return (-1);
if (spawn_preHook) spawn_preHook(flags, av);
/*
* We use our own version of spawn in uwtlib
* because the NT spawn() does not work well with tcl
*/
pid = _spawnvp_ex(flags, exec, av, 1);
free(exec);
return (pid);
}
#endif /* WIN32 */
next prev parent reply other threads:[~2024-05-13 13:22 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-10 16:36 [TUHS] " Clem Cole
[not found] ` <CAGg_6+Ov6hYTxQ5M-hEBoOiUQ0UVRP0V+aVi0STKAALLDUGY7g@mail.gmail.com>
[not found] ` <CAEoi9W7FbGZFhiddHWWqdivGFfgFAj9nsUApomswfP56rqTMpQ@mail.gmail.com>
[not found] ` <20240511213532.GB8330@mit.edu>
2024-05-12 19:34 ` [TUHS] Re: [COFF] " Adam Thornton
2024-05-12 19:47 ` Larry McVoy
2024-05-12 20:13 ` [TUHS] Re: forking, " John Levine
2024-05-12 22:56 ` Dan Cross
2024-05-12 23:34 ` Larry McVoy
2024-05-13 1:34 ` Dave Horsfall
2024-05-13 13:21 ` Larry McVoy [this message]
2024-05-13 3:29 ` Andrew Warkentin
2024-05-12 20:43 ` [TUHS] " Dave Horsfall
2024-05-13 2:33 ` Alexis
2024-05-13 2:57 ` Warner Losh
2024-05-13 5:23 ` markus schnalke
2024-05-13 6:18 ` Andrew Warkentin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240513132154.GN9216@mcvoy.com \
--to=lm@mcvoy.com \
--cc=dave@horsfall.org \
--cc=tuhs@tuhs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).