From debbugs-submit-bounces@debbugs.gnu.org Mon Sep 05 02:48:28 2022 Received: (at 52835) by debbugs.gnu.org; 5 Sep 2022 06:48:28 +0000 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 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 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== From: Josselin Poiret To: 52835@debbugs.gnu.org Subject: [PATCH v5 0/3] Move spawning procedures to posix_spawn. Date: Mon, 5 Sep 2022 08:48:12 +0200 Message-Id: In-Reply-To: <20220528124634.17353-1-dev@jpoiret.xyz> References: <20220528124634.17353-1-dev@jpoiret.xyz> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Authentication-Results: jpoiret.xyz; auth=pass smtp.auth=jpoiret@jpoiret.xyz smtp.mailfrom=dev@jpoiret.xyz X-Spam-Level: **** X-Spamd-Bar: ++++ X-Spam-Score: 2.0 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: 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 [...] Content analysis details: (2.0 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record 2.0 PDS_OTHER_BAD_TLD Untrustworthy TLDs [URI: jpoiret.xyz (xyz)] -0.0 T_SCC_BODY_TEXT_LINE No description available. 0.0 FROM_SUSPICIOUS_NTLD From abused NTLD X-Debbugs-Envelope-To: 52835 Cc: Timothy Sample , Josselin Poiret X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.0 (+) 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