From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Josselin Poiret via "Bug reports for GUILE, GNU's Ubiquitous Extension Language" Newsgroups: gmane.lisp.guile.bugs Subject: bug#52835: [PATCH v5 0/3] Move spawning procedures to posix_spawn. Date: Mon, 5 Sep 2022 08:48:12 +0200 Message-ID: References: <20220528124634.17353-1-dev@jpoiret.xyz> Reply-To: Josselin Poiret Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="29164"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Timothy Sample , Josselin Poiret To: 52835@debbugs.gnu.org Original-X-From: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Mon Sep 05 08:49:45 2022 Return-path: Envelope-to: guile-bugs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oV5vU-0007Qi-W5 for guile-bugs@m.gmane-mx.org; Mon, 05 Sep 2022 08:49:45 +0200 Original-Received: from localhost ([::1]:46718 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oV5vU-0002LM-1n for guile-bugs@m.gmane-mx.org; Mon, 05 Sep 2022 02:49:44 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:39608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oV5up-0001yH-3k for bug-guile@gnu.org; Mon, 05 Sep 2022 02:49:04 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:57553) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oV5uo-0006SS-RH for bug-guile@gnu.org; Mon, 05 Sep 2022 02:49:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oV5uo-0000cf-GC for bug-guile@gnu.org; Mon, 05 Sep 2022 02:49:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Josselin Poiret Original-Sender: "Debbugs-submit" Resent-CC: bug-guile@gnu.org Resent-Date: Mon, 05 Sep 2022 06:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 52835 X-GNU-PR-Package: guile X-GNU-PR-Keywords: patch Original-Received: via spool by 52835-submit@debbugs.gnu.org id=B52835.16623605082327 (code B ref 52835); Mon, 05 Sep 2022 06:49:02 +0000 Original-Received: (at 52835) by debbugs.gnu.org; 5 Sep 2022 06:48:28 +0000 Original-Received: from localhost ([127.0.0.1]:46245 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oV5uF-0000bN-Ht for submit@debbugs.gnu.org; Mon, 05 Sep 2022 02:48:28 -0400 Original-Received: from jpoiret.xyz ([206.189.101.64]:38352) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oV5uD-0000b7-0f for 52835@debbugs.gnu.org; Mon, 05 Sep 2022 02:48:26 -0400 Original-Received: from authenticated-user (jpoiret.xyz [206.189.101.64]) by jpoiret.xyz (Postfix) with ESMTPA id 29522184F64; Mon, 5 Sep 2022 06:48:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jpoiret.xyz; s=dkim; t=1662360503; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YKfcZXjN4cNvmU98yG2F66Db6ZGbKy6Ov9yS2/AbDKI=; b=LCLt0swBgyILncbcRbzfA4x1/enLekIg3TqUWGzrqvFQwbyHVLh2fLiZMjiDnHlcJXfaZ3 oCMVRagM/1Eu/AHTuDU0g5XwBc6JyR7LmObwgxsQth1a4Xvkd5zlAjyN+cTUqw+6lWN0wv xqA4aQkCh+AzXlLGr73u/m2DWa5/UqWfOwsCP1wriowq4Ri6TXjQsfXqGjK7H6DAgfKFqc NWVzaVCUsloNY5mnKN+UScbqjl1nn1zbsfiuxLQ6F2CLG2ywqjsiijL1afJ+BN1KVUgU6B 1y5o/rATCt/BtYYEit1dewzE8aB/VooFtYDYkA2XcpBmp1L2tE8/TeJvg6dynw== In-Reply-To: <20220528124634.17353-1-dev@jpoiret.xyz> Authentication-Results: jpoiret.xyz; auth=pass smtp.auth=jpoiret@jpoiret.xyz smtp.mailfrom=dev@jpoiret.xyz X-Spamd-Bar: ++++ X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guile@gnu.org List-Id: "Bug reports for GUILE, GNU's Ubiquitous Extension Language" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guile-bounces+guile-bugs=m.gmane-mx.org@gnu.org Original-Sender: "bug-guile" Xref: news.gmane.io gmane.lisp.guile.bugs:10363 Archived-At: Hi everyone, As was discussed on IRC, if we're going to rewrite a non-negligible part of posix.c, let's at least do it right and use posix_spawn to handle the process spawning side of things. This is quite complex to get right in general (highlighted by this very bug) and so people have already done the hard work for us. Additionally, we use Gnulib's posix_spawn, so that it is available on all supported systems. I then adjusted all the procedures to use posix_spawn instead of scm_piped_process and removed the latter, and the tests in popen.test, posix.test. There are two inderminates here: * I don't have anything other than a Linux system to test. This would need some feedback for at least Mach and win32. * This changes the interfaces (for the better, in my opinion): whenever possible, posix_spawn reports child starting failures as a parent errno, meaning that for eg. non- existing binaries, system* now throws an exception instead of returning a pid that will have an exit status code of 127. This means that existing code that relies on that behavior will need to be changed, the first example being the test suite which I adapted to actually check for exceptions instead. Some tests were removed because they no longer make sense: in posix.test, https://bugs.gnu.org/13166, exit code for nonexistent file and https://bugs.gnu.org/55596 are superseded by "exception for nonexistent file". Also, I have no experience in using Gnulib so I'm not 100% sure I committed exactly the right files, I'd love it if someone could check this is ok. What do you all think about this approach? Josselin Poiret (3): Update gnulib to 0.1.5414-8204d and add posix_spawn, posix_spawnp. Add spawn*. Move popen and posix procedures to spawn*. GNUmakefile | 2 +- build-aux/announce-gen | 69 +- build-aux/gendocs.sh | 50 +- build-aux/git-version-gen | 13 +- build-aux/gitlog-to-changelog | 4 +- build-aux/gnu-web-doc-update | 4 +- build-aux/gnupload | 4 +- build-aux/useless-if-before-free | 6 +- build-aux/vc-list-files | 2 +- doc/gendocs_template | 4 +- doc/gendocs_template_min | 2 +- gnulib-local/m4/clock_time.m4.diff | 12 +- lib/Makefile.am | 1252 +++++++++------- lib/_Noreturn.h | 2 +- lib/accept.c | 2 +- lib/accept4.c | 4 +- lib/access.c | 31 + lib/alignof.h | 2 +- lib/alloca.c | 35 - lib/alloca.in.h | 2 +- lib/arg-nonnull.h | 2 +- lib/arpa_inet.in.h | 2 +- lib/asnprintf.c | 2 +- lib/assure.h | 2 +- lib/attribute.h | 10 +- lib/basename-lgpl.c | 2 +- lib/basename-lgpl.h | 2 +- lib/binary-io.c | 2 +- lib/binary-io.h | 4 +- lib/bind.c | 2 +- lib/btowc.c | 2 +- lib/byteswap.in.h | 2 +- lib/c++defs.h | 2 +- lib/c-ctype.c | 2 +- lib/c-ctype.h | 2 +- lib/c-strcase.h | 2 +- lib/c-strcasecmp.c | 2 +- lib/c-strcaseeq.h | 2 +- lib/c-strncasecmp.c | 2 +- lib/canonicalize-lgpl.c | 2 +- lib/cdefs.h | 76 +- lib/ceil.c | 4 +- lib/cloexec.c | 2 +- lib/cloexec.h | 2 +- lib/close.c | 2 +- lib/concat-filename.c | 73 + lib/concat-filename.h | 46 + lib/connect.c | 2 +- lib/copysign.c | 4 +- lib/dirent.in.h | 24 +- lib/dirfd.c | 2 +- lib/dirname-lgpl.c | 2 +- lib/dirname.h | 2 +- lib/dup2.c | 2 +- lib/duplocale.c | 4 +- lib/dynarray.h | 2 +- lib/eloop-threshold.h | 2 +- lib/errno.in.h | 2 +- lib/fcntl.c | 2 +- lib/fcntl.in.h | 6 +- lib/fd-hook.c | 2 +- lib/fd-hook.h | 2 +- lib/filename.h | 2 +- lib/findprog-in.c | 399 ++++++ lib/findprog.h | 77 + lib/flexmember.h | 2 +- lib/float+.h | 2 +- lib/float.c | 2 +- lib/float.in.h | 2 +- lib/flock.c | 2 +- lib/floor.c | 4 +- lib/free.c | 2 +- lib/frexp.c | 2 +- lib/fstat.c | 2 +- lib/fsync.c | 2 +- lib/full-read.c | 2 +- lib/full-read.h | 2 +- lib/full-write.c | 2 +- lib/full-write.h | 2 +- lib/gai_strerror.c | 2 +- lib/getaddrinfo.c | 2 +- lib/getdtablesize.c | 2 +- lib/getlogin.c | 2 +- lib/getpeername.c | 2 +- lib/getrandom.c | 2 +- lib/getsockname.c | 2 +- lib/getsockopt.c | 2 +- lib/gettext.h | 15 +- lib/hard-locale.c | 2 +- lib/hard-locale.h | 2 +- lib/iconv.c | 2 +- lib/iconv.in.h | 2 +- lib/iconv_close.c | 2 +- lib/iconv_open-aix.gperf | 2 +- lib/iconv_open-hpux.gperf | 2 +- lib/iconv_open-irix.gperf | 2 +- lib/iconv_open-osf.gperf | 2 +- lib/iconv_open-solaris.gperf | 2 +- lib/iconv_open-zos.gperf | 2 +- lib/iconv_open-zos.h | 329 +++++ lib/iconv_open.c | 2 +- lib/iconveh.h | 7 +- lib/idx.h | 22 +- lib/inet_ntop.c | 2 +- lib/inet_pton.c | 2 +- lib/intprops-internal.h | 392 +++++ lib/intprops.h | 359 +---- lib/inttypes.h | 1509 ++++++++++++++++++++ lib/inttypes.in.h | 2 +- lib/isfinite.c | 4 +- lib/isinf.c | 4 +- lib/isnan.c | 2 +- lib/isnand-nolibm.h | 2 +- lib/isnand.c | 2 +- lib/isnanf-nolibm.h | 2 +- lib/isnanf.c | 2 +- lib/isnanl-nolibm.h | 2 +- lib/isnanl.c | 2 +- lib/itold.c | 2 +- lib/langinfo.in.h | 2 +- lib/lc-charset-dispatch.c | 2 +- lib/lc-charset-dispatch.h | 2 +- lib/libc-config.h | 13 +- lib/libunistring.valgrind | 4 +- lib/limits.in.h | 2 +- lib/link.c | 2 +- lib/listen.c | 2 +- lib/localcharset.c | 2 +- lib/localcharset.h | 2 +- lib/locale.in.h | 2 +- lib/localeconv.c | 2 +- lib/log.c | 4 +- lib/log1p.c | 4 +- lib/lstat.c | 2 +- lib/malloc.c | 2 +- lib/malloc/.dirstamp | 0 lib/malloc/dynarray-skeleton.c | 2 +- lib/malloc/dynarray-skeleton.gl.h | 529 +++++++ lib/malloc/dynarray.gl.h | 174 +++ lib/malloc/dynarray.h | 2 +- lib/malloc/dynarray_at_failure.c | 2 +- lib/malloc/dynarray_emplace_enlarge.c | 2 +- lib/malloc/dynarray_finalize.c | 2 +- lib/malloc/dynarray_resize.c | 2 +- lib/malloc/dynarray_resize_clear.c | 2 +- lib/malloc/scratch_buffer.h | 2 +- lib/malloc/scratch_buffer_dupfree.c | 2 +- lib/malloc/scratch_buffer_grow.c | 2 +- lib/malloc/scratch_buffer_grow_preserve.c | 2 +- lib/malloc/scratch_buffer_set_array_size.c | 2 +- lib/malloca.c | 12 +- lib/malloca.h | 2 +- lib/math.c | 2 +- lib/math.in.h | 16 +- lib/mbrtowc-impl-utf8.h | 2 +- lib/mbrtowc-impl.h | 2 +- lib/mbrtowc.c | 2 +- lib/mbsinit.c | 2 +- lib/mbtowc-impl.h | 2 +- lib/mbtowc-lock.c | 2 +- lib/mbtowc-lock.h | 2 +- lib/mbtowc.c | 2 +- lib/memchr.c | 2 +- lib/memchr.valgrind | 2 +- lib/mempcpy.c | 2 +- lib/minmax.h | 2 +- lib/mkdir.c | 4 +- lib/mkostemp.c | 2 +- lib/mktime-internal.h | 2 +- lib/mktime.c | 30 +- lib/msvc-inval.c | 2 +- lib/msvc-inval.h | 2 +- lib/msvc-nothrow.c | 2 +- lib/msvc-nothrow.h | 2 +- lib/netdb.in.h | 2 +- lib/netinet_in.in.h | 2 +- lib/nl_langinfo-lock.c | 2 +- lib/nl_langinfo.c | 2 +- lib/nproc.c | 24 +- lib/nproc.h | 2 +- lib/nstrftime.c | 28 +- lib/open.c | 2 +- lib/pathmax.h | 2 +- lib/pipe.c | 2 +- lib/pipe2.c | 2 +- lib/poll.c | 2 +- lib/poll.in.h | 2 +- lib/printf-args.c | 2 +- lib/printf-args.h | 2 +- lib/printf-parse.c | 2 +- lib/printf-parse.h | 2 +- lib/putenv.c | 4 +- lib/raise.c | 2 +- lib/rawmemchr.c | 78 +- lib/rawmemchr.valgrind | 2 +- lib/read.c | 2 +- lib/readlink.c | 6 +- lib/realloc.c | 2 +- lib/recv.c | 2 +- lib/recvfrom.c | 2 +- lib/regcomp.c | 831 +++++------ lib/regex.c | 3 +- lib/regex.h | 52 +- lib/regex_internal.c | 64 +- lib/regex_internal.h | 51 +- lib/regexec.c | 95 +- lib/rename.c | 4 +- lib/rmdir.c | 2 +- lib/round.c | 4 +- lib/safe-read.c | 2 +- lib/safe-read.h | 2 +- lib/safe-write.c | 2 +- lib/safe-write.h | 2 +- lib/same-inode.h | 2 +- lib/sched.h | 580 ++++++++ lib/sched.in.h | 99 ++ lib/scratch_buffer.h | 2 +- lib/select.c | 2 +- lib/send.c | 2 +- lib/sendto.c | 2 +- lib/setenv.c | 2 +- lib/setlocale-lock.c | 2 +- lib/setlocale_null.c | 2 +- lib/setlocale_null.h | 2 +- lib/setsockopt.c | 2 +- lib/shutdown.c | 2 +- lib/signal.in.h | 2 +- lib/signbitd.c | 2 +- lib/signbitf.c | 2 +- lib/signbitl.c | 2 +- lib/size_max.h | 2 +- lib/snprintf.c | 2 +- lib/socket.c | 2 +- lib/sockets.c | 4 +- lib/sockets.h | 2 +- lib/spawn.c | 34 + lib/spawn.h | 1499 +++++++++++++++++++ lib/spawn.in.h | 992 +++++++++++++ lib/spawn_int.h | 72 + lib/spawni.c | 965 +++++++++++++ lib/spawnp.c | 34 + lib/stat-time.c | 2 +- lib/stat-time.h | 8 +- lib/stat-w32.c | 2 +- lib/stat-w32.h | 2 +- lib/stat.c | 2 +- lib/stdalign.in.h | 2 +- lib/stdbool.h | 116 ++ lib/stdbool.in.h | 27 +- lib/stdckdint.h | 38 + lib/stdckdint.in.h | 37 + lib/stddef.in.h | 2 +- lib/stdint.in.h | 2 +- lib/stdio-read.c | 168 +++ lib/stdio-write.c | 206 +++ lib/stdio.in.h | 86 +- lib/stdlib.in.h | 66 +- lib/stpcpy.c | 49 + lib/strchrnul.c | 142 ++ lib/strchrnul.valgrind | 28 + lib/strdup.c | 2 +- lib/streq.h | 2 +- lib/strftime.h | 4 +- lib/striconveh.c | 106 +- lib/striconveh.h | 2 +- lib/string.in.h | 175 ++- lib/stripslash.c | 2 +- lib/sys-limits.h | 2 +- lib/sys_file.in.h | 2 +- lib/sys_random.in.h | 8 +- lib/sys_select.in.h | 15 +- lib/sys_socket.c | 2 +- lib/sys_socket.in.h | 2 +- lib/sys_stat.in.h | 30 +- lib/sys_time.in.h | 2 +- lib/sys_times.in.h | 2 +- lib/sys_types.in.h | 2 +- lib/sys_uio.in.h | 2 +- lib/tempname.c | 176 +-- lib/tempname.h | 4 +- lib/time-internal.h | 4 +- lib/time.in.h | 13 +- lib/time_r.c | 2 +- lib/time_rz.c | 4 +- lib/timegm.c | 2 +- lib/times.c | 2 +- lib/trunc.c | 4 +- lib/tzset.c | 4 +- lib/unistd.c | 2 +- lib/unistd.in.h | 21 +- lib/unsetenv.c | 2 +- lib/vasnprintf.c | 241 +--- lib/vasnprintf.h | 2 +- lib/verify.h | 14 +- lib/vsnprintf.c | 2 +- lib/w32sock.h | 2 +- lib/warn-on-use.h | 8 +- lib/wchar.in.h | 73 +- lib/wcrtomb.c | 2 +- lib/wctype-h.c | 2 +- lib/wctype.in.h | 2 +- lib/windows-initguard.h | 2 +- lib/windows-spawn.c | 727 ++++++++++ lib/windows-spawn.h | 157 ++ lib/write.c | 2 +- lib/xalloc-oversized.h | 2 +- lib/xsize.c | 2 +- lib/xsize.h | 2 +- libguile/posix.c | 221 +-- m4/00gnulib.m4 | 2 +- m4/__inline.m4 | 2 +- m4/absolute-header.m4 | 2 +- m4/accept4.m4 | 2 +- m4/access.m4 | 16 + m4/alloca.m4 | 12 +- m4/arpa_inet_h.m4 | 2 +- m4/autobuild.m4 | 2 +- m4/btowc.m4 | 2 +- m4/builtin-expect.m4 | 2 +- m4/byteswap.m4 | 10 +- m4/canonicalize.m4 | 2 +- m4/ceil.m4 | 2 +- m4/check-math-lib.m4 | 2 +- m4/clock_time.m4 | 20 +- m4/close.m4 | 2 +- m4/codeset.m4 | 2 +- m4/copysign.m4 | 2 +- m4/dirent_h.m4 | 2 +- m4/dirfd.m4 | 2 +- m4/double-slash-root.m4 | 2 +- m4/dup2.m4 | 2 +- m4/duplocale.m4 | 2 +- m4/eaccess.m4 | 12 + m4/eealloc.m4 | 2 +- m4/environ.m4 | 2 +- m4/errno_h.m4 | 12 +- m4/exponentd.m4 | 2 +- m4/exponentf.m4 | 2 +- m4/exponentl.m4 | 2 +- m4/extensions.m4 | 2 +- m4/extern-inline.m4 | 28 +- m4/fcntl-o.m4 | 2 +- m4/fcntl.m4 | 2 +- m4/fcntl_h.m4 | 2 +- m4/findprog-in.m4 | 11 + m4/flexmember.m4 | 2 +- m4/float_h.m4 | 22 +- m4/flock.m4 | 2 +- m4/floor.m4 | 2 +- m4/fpieee.m4 | 2 +- m4/free.m4 | 2 +- m4/frexp.m4 | 2 +- m4/fstat.m4 | 2 +- m4/fsync.m4 | 2 +- m4/func.m4 | 2 +- m4/getaddrinfo.m4 | 2 +- m4/getdtablesize.m4 | 2 +- m4/getlogin.m4 | 2 +- m4/getrandom.m4 | 2 +- m4/gettext.m4 | 383 +++++ m4/glibc2.m4 | 30 + m4/glibc21.m4 | 30 + m4/gnulib-cache.m4 | 8 +- m4/gnulib-common.m4 | 277 +++- m4/gnulib-comp.m4 | 743 ++++++---- m4/gnulib-tool.m4 | 10 +- m4/host-cpu-c-abi.m4 | 7 +- m4/hostent.m4 | 2 +- m4/iconv.m4 | 26 +- m4/iconv_h.m4 | 18 +- m4/iconv_open-utf.m4 | 2 +- m4/iconv_open.m4 | 2 +- m4/include_next.m4 | 8 +- m4/inet_ntop.m4 | 2 +- m4/inet_pton.m4 | 2 +- m4/intdiv0.m4 | 84 ++ m4/intl.m4 | 294 ++++ m4/intldir.m4 | 19 + m4/intlmacosx.m4 | 51 + m4/intmax.m4 | 33 + m4/intmax_t.m4 | 2 +- m4/inttypes-pri.m4 | 36 + m4/inttypes.m4 | 6 +- m4/inttypes_h.m4 | 2 +- m4/isfinite.m4 | 2 +- m4/isinf.m4 | 2 +- m4/isnan.m4 | 2 +- m4/isnand.m4 | 2 +- m4/isnanf.m4 | 2 +- m4/isnanl.m4 | 2 +- m4/langinfo_h.m4 | 2 +- m4/largefile.m4 | 9 +- m4/lcmessage.m4 | 31 + m4/ld-version-script.m4 | 2 +- m4/ldexp.m4 | 2 +- m4/lib-ld.m4 | 2 +- m4/lib-link.m4 | 8 +- m4/lib-prefix.m4 | 6 +- m4/libunistring.m4 | 2 +- m4/limits-h.m4 | 11 +- m4/link.m4 | 2 +- m4/localcharset.m4 | 2 +- m4/locale-fr.m4 | 2 +- m4/locale-ja.m4 | 2 +- m4/locale-zh.m4 | 2 +- m4/locale_h.m4 | 2 +- m4/localeconv.m4 | 2 +- m4/lock.m4 | 37 + m4/log.m4 | 2 +- m4/log1p.m4 | 2 +- m4/longlong.m4 | 106 ++ m4/lstat.m4 | 2 +- m4/malloc.m4 | 13 +- m4/malloca.m4 | 2 +- m4/math_h.m4 | 2 +- m4/mathfunc.m4 | 2 +- m4/mbrtowc.m4 | 2 +- m4/mbsinit.m4 | 2 +- m4/mbstate_t.m4 | 2 +- m4/mbtowc.m4 | 2 +- m4/memchr.m4 | 2 +- m4/mempcpy.m4 | 2 +- m4/minmax.m4 | 2 +- m4/mkdir.m4 | 2 +- m4/mkostemp.m4 | 2 +- m4/mktime.m4 | 31 +- m4/mmap-anon.m4 | 2 +- m4/mode_t.m4 | 2 +- m4/msvc-inval.m4 | 2 +- m4/msvc-nothrow.m4 | 2 +- m4/multiarch.m4 | 2 +- m4/netdb_h.m4 | 2 +- m4/netinet_in_h.m4 | 10 +- m4/nl_langinfo.m4 | 2 +- m4/nls.m4 | 32 + m4/nocrash.m4 | 2 +- m4/nproc.m4 | 2 +- m4/nstrftime.m4 | 2 +- m4/off_t.m4 | 2 +- m4/open-cloexec.m4 | 2 +- m4/open-slash.m4 | 2 +- m4/open.m4 | 2 +- m4/pathmax.m4 | 2 +- m4/pid_t.m4 | 2 +- m4/pipe.m4 | 2 +- m4/pipe2.m4 | 2 +- m4/po.m4 | 449 ++++++ m4/poll.m4 | 2 +- m4/poll_h.m4 | 2 +- m4/posix_spawn.m4 | 691 +++++++++ m4/printf-posix.m4 | 45 + m4/printf.m4 | 2 +- m4/progtest.m4 | 92 ++ m4/putenv.m4 | 2 +- m4/raise.m4 | 2 +- m4/rawmemchr.m4 | 2 +- m4/read.m4 | 2 +- m4/readlink.m4 | 2 +- m4/realloc.m4 | 12 +- m4/regex.m4 | 2 +- m4/rename.m4 | 2 +- m4/rmdir.m4 | 2 +- m4/round.m4 | 2 +- m4/safe-read.m4 | 2 +- m4/safe-write.m4 | 2 +- m4/sched_h.m4 | 106 ++ m4/select.m4 | 2 +- m4/servent.m4 | 2 +- m4/setenv.m4 | 2 +- m4/setlocale_null.m4 | 2 +- m4/sh-filename.m4 | 24 + m4/signal_h.m4 | 2 +- m4/signbit.m4 | 2 +- m4/size_max.m4 | 2 +- m4/snprintf.m4 | 2 +- m4/socketlib.m4 | 2 +- m4/sockets.m4 | 2 +- m4/socklen.m4 | 2 +- m4/sockpfaf.m4 | 2 +- m4/spawn_h.m4 | 151 ++ m4/ssize_t.m4 | 2 +- m4/stat-time.m4 | 2 +- m4/stat.m4 | 2 +- m4/std-gnu11.m4 | 2 +- m4/stdalign.m4 | 9 +- m4/stdbool.m4 | 124 +- m4/stddef_h.m4 | 16 +- m4/stdint.m4 | 10 +- m4/stdint_h.m4 | 2 +- m4/stdio_h.m4 | 33 +- m4/stdlib_h.m4 | 16 +- m4/stpcpy.m4 | 25 + m4/strchrnul.m4 | 50 + m4/strdup.m4 | 2 +- m4/string_h.m4 | 6 +- m4/sys_file_h.m4 | 2 +- m4/sys_random_h.m4 | 2 +- m4/sys_select_h.m4 | 2 +- m4/sys_socket_h.m4 | 9 +- m4/sys_stat_h.m4 | 8 +- m4/sys_time_h.m4 | 2 +- m4/sys_times_h.m4 | 2 +- m4/sys_types_h.m4 | 2 +- m4/sys_uio_h.m4 | 2 +- m4/tempname.m4 | 2 +- m4/threadlib.m4 | 64 +- m4/time_h.m4 | 6 +- m4/time_r.m4 | 2 +- m4/time_rz.m4 | 2 +- m4/timegm.m4 | 2 +- m4/times.m4 | 2 +- m4/tm_gmtoff.m4 | 2 +- m4/trunc.m4 | 2 +- m4/tzset.m4 | 2 +- m4/uintmax_t.m4 | 30 + m4/unistd_h.m4 | 191 +-- m4/vararrays.m4 | 72 + m4/vasnprintf.m4 | 2 +- m4/visibility.m4 | 2 +- m4/vsnprintf.m4 | 2 +- m4/warn-on-use.m4 | 2 +- m4/warnings.m4 | 2 +- m4/wchar_h.m4 | 6 +- m4/wchar_t.m4 | 2 +- m4/wcrtomb.m4 | 2 +- m4/wctype_h.m4 | 2 +- m4/wint_t.m4 | 2 +- m4/write.m4 | 2 +- m4/xsize.m4 | 2 +- m4/year2038.m4 | 12 +- m4/zzgnulib.m4 | 2 +- maint.mk | 68 +- module/ice-9/popen.scm | 83 +- test-suite/tests/popen.test | 14 +- test-suite/tests/posix.test | 36 +- 535 files changed, 16353 insertions(+), 3490 deletions(-) create mode 100644 lib/access.c create mode 100644 lib/concat-filename.c create mode 100644 lib/concat-filename.h create mode 100644 lib/findprog-in.c create mode 100644 lib/findprog.h create mode 100644 lib/iconv_open-zos.h create mode 100644 lib/intprops-internal.h create mode 100644 lib/inttypes.h create mode 100644 lib/malloc/.dirstamp create mode 100644 lib/malloc/dynarray-skeleton.gl.h create mode 100644 lib/malloc/dynarray.gl.h create mode 100644 lib/sched.h create mode 100644 lib/sched.in.h create mode 100644 lib/spawn.c create mode 100644 lib/spawn.h create mode 100644 lib/spawn.in.h create mode 100644 lib/spawn_int.h create mode 100644 lib/spawni.c create mode 100644 lib/spawnp.c create mode 100644 lib/stdbool.h create mode 100644 lib/stdckdint.h create mode 100644 lib/stdckdint.in.h create mode 100644 lib/stdio-read.c create mode 100644 lib/stdio-write.c create mode 100644 lib/stpcpy.c create mode 100644 lib/strchrnul.c create mode 100644 lib/strchrnul.valgrind create mode 100644 lib/windows-spawn.c create mode 100644 lib/windows-spawn.h create mode 100644 m4/access.m4 create mode 100644 m4/eaccess.m4 create mode 100644 m4/findprog-in.m4 create mode 100644 m4/gettext.m4 create mode 100644 m4/glibc2.m4 create mode 100644 m4/glibc21.m4 create mode 100644 m4/intdiv0.m4 create mode 100644 m4/intl.m4 create mode 100644 m4/intldir.m4 create mode 100644 m4/intlmacosx.m4 create mode 100644 m4/intmax.m4 create mode 100644 m4/inttypes-pri.m4 create mode 100644 m4/lcmessage.m4 create mode 100644 m4/lock.m4 create mode 100644 m4/longlong.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/po.m4 create mode 100644 m4/posix_spawn.m4 create mode 100644 m4/printf-posix.m4 create mode 100644 m4/progtest.m4 create mode 100644 m4/sched_h.m4 create mode 100644 m4/sh-filename.m4 create mode 100644 m4/spawn_h.m4 create mode 100644 m4/stpcpy.m4 create mode 100644 m4/strchrnul.m4 create mode 100644 m4/uintmax_t.m4 create mode 100644 m4/vararrays.m4 base-commit: 61d8dab8eafd498306ce618582aab37497df77b4 -- 2.37.2